release 0.20

This commit is contained in:
Simon Cruanes 2016-10-14 11:35:39 +02:00
parent f6774434cd
commit 88025034b6
4 changed files with 5513 additions and 3452 deletions

View file

@ -1,19 +1,12 @@
(* OASIS_START *) (* OASIS_START *)
(* DO NOT EDIT (digest: 9ba607f1a3e839f1c1e8ea449ddfab16) *) (* DO NOT EDIT (digest: 424a79b7df70bc76f7d6f1ee2e9da48e) *)
module OASISGettext = struct module OASISGettext = struct
(* # 22 "src/oasis/OASISGettext.ml" *) (* # 22 "src/oasis/OASISGettext.ml" *)
let ns_ str = let ns_ str = str
str let s_ str = str
let f_ (str: ('a, 'b, 'c, 'd) format4) = str
let s_ str =
str
let f_ (str: ('a, 'b, 'c, 'd) format4) =
str
let fn_ fmt1 fmt2 n = let fn_ fmt1 fmt2 n =
@ -23,10 +16,7 @@ module OASISGettext = struct
fmt2^^"" fmt2^^""
let init = let init = []
[]
end end
module OASISString = struct module OASISString = struct
@ -38,7 +28,7 @@ module OASISString = struct
Mostly inspired by extlib and batteries ExtString and BatString libraries. Mostly inspired by extlib and batteries ExtString and BatString libraries.
@author Sylvain Le Gall @author Sylvain Le Gall
*) *)
let nsplitf str f = let nsplitf str f =
@ -52,19 +42,19 @@ module OASISString = struct
Buffer.clear buf Buffer.clear buf
in in
let str_len = String.length str in let str_len = String.length str in
for i = 0 to str_len - 1 do for i = 0 to str_len - 1 do
if f str.[i] then if f str.[i] then
push () push ()
else else
Buffer.add_char buf str.[i] Buffer.add_char buf str.[i]
done; done;
push (); push ();
List.rev !lst List.rev !lst
(** [nsplit c s] Split the string [s] at char [c]. It doesn't include the (** [nsplit c s] Split the string [s] at char [c]. It doesn't include the
separator. separator.
*) *)
let nsplit str c = let nsplit str c =
nsplitf str ((=) c) nsplitf str ((=) c)
@ -72,18 +62,18 @@ module OASISString = struct
let find ~what ?(offset=0) str = let find ~what ?(offset=0) str =
let what_idx = ref 0 in let what_idx = ref 0 in
let str_idx = ref offset in let str_idx = ref offset in
while !str_idx < String.length str && while !str_idx < String.length str &&
!what_idx < String.length what do !what_idx < String.length what do
if str.[!str_idx] = what.[!what_idx] then if str.[!str_idx] = what.[!what_idx] then
incr what_idx incr what_idx
else
what_idx := 0;
incr str_idx
done;
if !what_idx <> String.length what then
raise Not_found
else else
!str_idx - !what_idx what_idx := 0;
incr str_idx
done;
if !what_idx <> String.length what then
raise Not_found
else
!str_idx - !what_idx
let sub_start str len = let sub_start str len =
@ -106,19 +96,19 @@ module OASISString = struct
let what_idx = ref 0 in let what_idx = ref 0 in
let str_idx = ref offset in let str_idx = ref offset in
let ok = ref true in let ok = ref true in
while !ok && while !ok &&
!str_idx < String.length str && !str_idx < String.length str &&
!what_idx < String.length what do !what_idx < String.length what do
if str.[!str_idx] = what.[!what_idx] then if str.[!str_idx] = what.[!what_idx] then
incr what_idx incr what_idx
else
ok := false;
incr str_idx
done;
if !what_idx = String.length what then
true
else else
false ok := false;
incr str_idx
done;
if !what_idx = String.length what then
true
else
false
let strip_starts_with ~what str = let strip_starts_with ~what str =
@ -132,19 +122,19 @@ module OASISString = struct
let what_idx = ref ((String.length what) - 1) in let what_idx = ref ((String.length what) - 1) in
let str_idx = ref ((String.length str) - 1) in let str_idx = ref ((String.length str) - 1) in
let ok = ref true in let ok = ref true in
while !ok && while !ok &&
offset <= !str_idx && offset <= !str_idx &&
0 <= !what_idx do 0 <= !what_idx do
if str.[!str_idx] = what.[!what_idx] then if str.[!str_idx] = what.[!what_idx] then
decr what_idx decr what_idx
else
ok := false;
decr str_idx
done;
if !what_idx = -1 then
true
else else
false ok := false;
decr str_idx
done;
if !what_idx = -1 then
true
else
false
let strip_ends_with ~what str = let strip_ends_with ~what str =
@ -189,19 +179,181 @@ module OASISString = struct
end end
module OASISExpr = struct module OASISUtils = struct
(* # 22 "src/oasis/OASISExpr.ml" *) (* # 22 "src/oasis/OASISUtils.ml" *)
open OASISGettext open OASISGettext
module MapExt =
struct
module type S =
sig
include Map.S
val add_list: 'a t -> (key * 'a) list -> 'a t
val of_list: (key * 'a) list -> 'a t
val to_list: 'a t -> (key * 'a) list
end
module Make (Ord: Map.OrderedType) =
struct
include Map.Make(Ord)
let rec add_list t =
function
| (k, v) :: tl -> add_list (add k v t) tl
| [] -> t
let of_list lst = add_list empty lst
let to_list t = fold (fun k v acc -> (k, v) :: acc) t []
end
end
module MapString = MapExt.Make(String)
module SetExt =
struct
module type S =
sig
include Set.S
val add_list: t -> elt list -> t
val of_list: elt list -> t
val to_list: t -> elt list
end
module Make (Ord: Set.OrderedType) =
struct
include Set.Make(Ord)
let rec add_list t =
function
| e :: tl -> add_list (add e t) tl
| [] -> t
let of_list lst = add_list empty lst
let to_list = elements
end
end
module SetString = SetExt.Make(String)
let compare_csl s1 s2 =
String.compare (OASISString.lowercase_ascii s1) (OASISString.lowercase_ascii s2)
module HashStringCsl =
Hashtbl.Make
(struct
type t = string
let equal s1 s2 = (compare_csl s1 s2) = 0
let hash s = Hashtbl.hash (OASISString.lowercase_ascii s)
end)
module SetStringCsl =
SetExt.Make
(struct
type t = string
let compare = compare_csl
end)
let varname_of_string ?(hyphen='_') s =
if String.length s = 0 then
begin
invalid_arg "varname_of_string"
end
else
begin
let buf =
OASISString.replace_chars
(fun c ->
if ('a' <= c && c <= 'z')
||
('A' <= c && c <= 'Z')
||
('0' <= c && c <= '9') then
c
else
hyphen)
s;
in
let buf =
(* Start with a _ if digit *)
if '0' <= s.[0] && s.[0] <= '9' then
"_"^buf
else
buf
in
OASISString.lowercase_ascii buf
end
let varname_concat ?(hyphen='_') p s =
let what = String.make 1 hyphen in
let p =
try
OASISString.strip_ends_with ~what p
with Not_found ->
p
in
let s =
try
OASISString.strip_starts_with ~what s
with Not_found ->
s
in
p^what^s
let is_varname str =
str = varname_of_string str
let failwithf fmt = Printf.ksprintf failwith fmt
let rec file_location ?pos1 ?pos2 ?lexbuf () =
match pos1, pos2, lexbuf with
| Some p, None, _ | None, Some p, _ ->
file_location ~pos1:p ~pos2:p ?lexbuf ()
| Some p1, Some p2, _ ->
let open Lexing in
let fn, lineno = p1.pos_fname, p1.pos_lnum in
let c1 = p1.pos_cnum - p1.pos_bol in
let c2 = c1 + (p2.pos_cnum - p1.pos_cnum) in
Printf.sprintf (f_ "file %S, line %d, characters %d-%d") fn lineno c1 c2
| _, _, Some lexbuf ->
file_location
~pos1:(Lexing.lexeme_start_p lexbuf)
~pos2:(Lexing.lexeme_end_p lexbuf)
()
| None, None, None ->
s_ "<position undefined>"
let failwithpf ?pos1 ?pos2 ?lexbuf fmt =
let loc = file_location ?pos1 ?pos2 ?lexbuf () in
Printf.ksprintf (fun s -> failwith (Printf.sprintf "%s: %s" loc s)) fmt
end
module OASISExpr = struct
(* # 22 "src/oasis/OASISExpr.ml" *)
open OASISGettext
open OASISUtils
type test = string type test = string
type flag = string type flag = string
@ -214,7 +366,6 @@ module OASISExpr = struct
| ETest of test * string | ETest of test * string
type 'a choices = (t * 'a) list type 'a choices = (t * 'a) list
@ -289,7 +440,7 @@ module OASISExpr = struct
end end
# 292 "myocamlbuild.ml" # 443 "myocamlbuild.ml"
module BaseEnvLight = struct module BaseEnvLight = struct
(* # 22 "src/base/BaseEnvLight.ml" *) (* # 22 "src/base/BaseEnvLight.ml" *)
@ -300,132 +451,103 @@ module BaseEnvLight = struct
type t = string MapString.t type t = string MapString.t
let default_filename = let default_filename = Filename.concat (Sys.getcwd ()) "setup.data"
Filename.concat
(Sys.getcwd ())
"setup.data"
let load ?(allow_empty=false) ?(filename=default_filename) () = let load ?(allow_empty=false) ?(filename=default_filename) ?stream () =
if Sys.file_exists filename then let line = ref 1 in
begin let lexer st =
let chn = let st_line =
open_in_bin filename Stream.from
in (fun _ ->
let st = try
Stream.of_channel chn match Stream.next st with
in | '\n' -> incr line; Some '\n'
let line = | c -> Some c
ref 1 with Stream.Failure -> None)
in in
let st_line = Genlex.make_lexer ["="] st_line
Stream.from in
(fun _ -> let rec read_file lxr mp =
try match Stream.npeek 3 lxr with
match Stream.next st with | [Genlex.Ident nm; Genlex.Kwd "="; Genlex.String value] ->
| '\n' -> incr line; Some '\n' Stream.junk lxr; Stream.junk lxr; Stream.junk lxr;
| c -> Some c read_file lxr (MapString.add nm value mp)
with Stream.Failure -> None) | [] -> mp
in | _ ->
let lexer = failwith
Genlex.make_lexer ["="] st_line (Printf.sprintf "Malformed data file '%s' line %d" filename !line)
in in
let rec read_file mp = match stream with
match Stream.npeek 3 lexer with | Some st -> read_file (lexer st) MapString.empty
| [Genlex.Ident nm; Genlex.Kwd "="; Genlex.String value] -> | None ->
Stream.junk lexer; if Sys.file_exists filename then begin
Stream.junk lexer; let chn = open_in_bin filename in
Stream.junk lexer; let st = Stream.of_channel chn in
read_file (MapString.add nm value mp) try
| [] -> let mp = read_file (lexer st) MapString.empty in
mp close_in chn; mp
| _ -> with e ->
failwith close_in chn; raise e
(Printf.sprintf end else if allow_empty then begin
"Malformed data file '%s' line %d"
filename !line)
in
let mp =
read_file MapString.empty
in
close_in chn;
mp
end
else if allow_empty then
begin
MapString.empty MapString.empty
end end else begin
else
begin
failwith failwith
(Printf.sprintf (Printf.sprintf
"Unable to load environment, the file '%s' doesn't exist." "Unable to load environment, the file '%s' doesn't exist."
filename) filename)
end end
let rec var_expand str env = let rec var_expand str env =
let buff = let buff = Buffer.create ((String.length str) * 2) in
Buffer.create ((String.length str) * 2) Buffer.add_substitute
in buff
Buffer.add_substitute (fun var ->
buff try
(fun var -> var_expand (MapString.find var env) env
try with Not_found ->
var_expand (MapString.find var env) env failwith
with Not_found -> (Printf.sprintf
failwith "No variable %s defined when trying to expand %S."
(Printf.sprintf var
"No variable %s defined when trying to expand %S." str))
var str;
str)) Buffer.contents buff
str;
Buffer.contents buff
let var_get name env = let var_get name env = var_expand (MapString.find name env) env
var_expand (MapString.find name env) env let var_choose lst env = OASISExpr.choose (fun nm -> var_get nm env) lst
let var_choose lst env =
OASISExpr.choose
(fun nm -> var_get nm env)
lst
end end
# 397 "myocamlbuild.ml" # 523 "myocamlbuild.ml"
module MyOCamlbuildFindlib = struct module MyOCamlbuildFindlib = struct
(* # 22 "src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" *) (* # 22 "src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" *)
(** OCamlbuild extension, copied from (** OCamlbuild extension, copied from
* http://brion.inria.fr/gallium/index.php/Using_ocamlfind_with_ocamlbuild * https://ocaml.org/learn/tutorials/ocamlbuild/Using_ocamlfind_with_ocamlbuild.html
* by N. Pouillard and others * by N. Pouillard and others
* *
* Updated on 2009/02/28 * Updated on 2016-06-02
* *
* Modified by Sylvain Le Gall * Modified by Sylvain Le Gall
*) *)
open Ocamlbuild_plugin open Ocamlbuild_plugin
type conf =
{ no_automatic_syntax: bool;
}
(* these functions are not really officially exported *) type conf = {no_automatic_syntax: bool}
let run_and_read =
Ocamlbuild_pack.My_unix.run_and_read
let blank_sep_strings = let run_and_read = Ocamlbuild_pack.My_unix.run_and_read
Ocamlbuild_pack.Lexers.blank_sep_strings
let blank_sep_strings = Ocamlbuild_pack.Lexers.blank_sep_strings
let exec_from_conf exec = let exec_from_conf exec =
let exec = let exec =
let env_filename = Pathname.basename BaseEnvLight.default_filename in let env = BaseEnvLight.load ~allow_empty:true () in
let env = BaseEnvLight.load ~filename:env_filename ~allow_empty:true () in
try try
BaseEnvLight.var_get exec env BaseEnvLight.var_get exec env
with Not_found -> with Not_found ->
@ -436,7 +558,7 @@ module MyOCamlbuildFindlib = struct
if Sys.os_type = "Win32" then begin if Sys.os_type = "Win32" then begin
let buff = Buffer.create (String.length str) in let buff = Buffer.create (String.length str) in
(* Adapt for windowsi, ocamlbuild + win32 has a hard time to handle '\\'. (* Adapt for windowsi, ocamlbuild + win32 has a hard time to handle '\\'.
*) *)
String.iter String.iter
(fun c -> Buffer.add_char buff (if c = '\\' then '/' else c)) (fun c -> Buffer.add_char buff (if c = '\\' then '/' else c))
str; str;
@ -445,7 +567,8 @@ module MyOCamlbuildFindlib = struct
str str
end end
in in
fix_win32 exec fix_win32 exec
let split s ch = let split s ch =
let buf = Buffer.create 13 in let buf = Buffer.create 13 in
@ -454,15 +577,15 @@ module MyOCamlbuildFindlib = struct
x := (Buffer.contents buf) :: !x; x := (Buffer.contents buf) :: !x;
Buffer.clear buf Buffer.clear buf
in in
String.iter String.iter
(fun c -> (fun c ->
if c = ch then if c = ch then
flush () flush ()
else else
Buffer.add_char buf c) Buffer.add_char buf c)
s; s;
flush (); flush ();
List.rev !x List.rev !x
let split_nl s = split s '\n' let split_nl s = split s '\n'
@ -504,85 +627,89 @@ module MyOCamlbuildFindlib = struct
let dispatch conf = let dispatch conf =
function function
| After_options -> | After_options ->
(* By using Before_options one let command line options have an higher (* By using Before_options one let command line options have an higher
* priority on the contrary using After_options will guarantee to have * priority on the contrary using After_options will guarantee to have
* the higher priority override default commands by ocamlfind ones *) * the higher priority override default commands by ocamlfind ones *)
Options.ocamlc := ocamlfind & A"ocamlc"; Options.ocamlc := ocamlfind & A"ocamlc";
Options.ocamlopt := ocamlfind & A"ocamlopt"; Options.ocamlopt := ocamlfind & A"ocamlopt";
Options.ocamldep := ocamlfind & A"ocamldep"; Options.ocamldep := ocamlfind & A"ocamldep";
Options.ocamldoc := ocamlfind & A"ocamldoc"; Options.ocamldoc := ocamlfind & A"ocamldoc";
Options.ocamlmktop := ocamlfind & A"ocamlmktop"; Options.ocamlmktop := ocamlfind & A"ocamlmktop";
Options.ocamlmklib := ocamlfind & A"ocamlmklib" Options.ocamlmklib := ocamlfind & A"ocamlmklib"
| After_rules -> | After_rules ->
(* When one link an OCaml library/binary/package, one should use (* Avoid warnings for unused tag *)
* -linkpkg *) flag ["tests"] N;
flag ["ocaml"; "link"; "program"] & A"-linkpkg";
if not (conf.no_automatic_syntax) then begin (* When one link an OCaml library/binary/package, one should use
(* For each ocamlfind package one inject the -package option when * -linkpkg *)
* compiling, computing dependencies, generating documentation and flag ["ocaml"; "link"; "program"] & A"-linkpkg";
* linking. *)
List.iter
begin fun pkg ->
let base_args = [A"-package"; A pkg] in
(* TODO: consider how to really choose camlp4o or camlp4r. *)
let syn_args = [A"-syntax"; A "camlp4o"] in
let (args, pargs) =
(* Heuristic to identify syntax extensions: whether they end in
".syntax"; some might not.
*)
if Filename.check_suffix pkg "syntax" ||
List.mem pkg well_known_syntax then
(syn_args @ base_args, syn_args)
else
(base_args, [])
in
flag ["ocaml"; "compile"; "pkg_"^pkg] & S args;
flag ["ocaml"; "ocamldep"; "pkg_"^pkg] & S args;
flag ["ocaml"; "doc"; "pkg_"^pkg] & S args;
flag ["ocaml"; "link"; "pkg_"^pkg] & S base_args;
flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S args;
(* TODO: Check if this is allowed for OCaml < 3.12.1 *) (* For each ocamlfind package one inject the -package option when
flag ["ocaml"; "compile"; "package("^pkg^")"] & S pargs; * compiling, computing dependencies, generating documentation and
flag ["ocaml"; "ocamldep"; "package("^pkg^")"] & S pargs; * linking. *)
flag ["ocaml"; "doc"; "package("^pkg^")"] & S pargs; List.iter
flag ["ocaml"; "infer_interface"; "package("^pkg^")"] & S pargs; begin fun pkg ->
end let base_args = [A"-package"; A pkg] in
(find_packages ()); (* TODO: consider how to really choose camlp4o or camlp4r. *)
end; let syn_args = [A"-syntax"; A "camlp4o"] in
let (args, pargs) =
(* Heuristic to identify syntax extensions: whether they end in
".syntax"; some might not.
*)
if not (conf.no_automatic_syntax) &&
(Filename.check_suffix pkg "syntax" ||
List.mem pkg well_known_syntax) then
(syn_args @ base_args, syn_args)
else
(base_args, [])
in
flag ["ocaml"; "compile"; "pkg_"^pkg] & S args;
flag ["ocaml"; "ocamldep"; "pkg_"^pkg] & S args;
flag ["ocaml"; "doc"; "pkg_"^pkg] & S args;
flag ["ocaml"; "link"; "pkg_"^pkg] & S base_args;
flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S args;
(* Like -package but for extensions syntax. Morover -syntax is useless (* TODO: Check if this is allowed for OCaml < 3.12.1 *)
* when linking. *) flag ["ocaml"; "compile"; "package("^pkg^")"] & S pargs;
List.iter begin fun syntax -> flag ["ocaml"; "ocamldep"; "package("^pkg^")"] & S pargs;
flag ["ocaml"; "doc"; "package("^pkg^")"] & S pargs;
flag ["ocaml"; "infer_interface"; "package("^pkg^")"] & S pargs;
end
(find_packages ());
(* Like -package but for extensions syntax. Morover -syntax is useless
* when linking. *)
List.iter begin fun syntax ->
flag ["ocaml"; "compile"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; flag ["ocaml"; "compile"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
flag ["ocaml"; "ocamldep"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; flag ["ocaml"; "ocamldep"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
flag ["ocaml"; "doc"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; flag ["ocaml"; "doc"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
flag ["ocaml"; "infer_interface"; "syntax_"^syntax] & flag ["ocaml"; "infer_interface"; "syntax_"^syntax] &
S[A"-syntax"; A syntax]; S[A"-syntax"; A syntax];
end (find_syntaxes ()); end (find_syntaxes ());
(* The default "thread" tag is not compatible with ocamlfind. (* The default "thread" tag is not compatible with ocamlfind.
* Indeed, the default rules add the "threads.cma" or "threads.cmxa" * Indeed, the default rules add the "threads.cma" or "threads.cmxa"
* options when using this tag. When using the "-linkpkg" option with * options when using this tag. When using the "-linkpkg" option with
* ocamlfind, this module will then be added twice on the command line. * ocamlfind, this module will then be added twice on the command line.
* *
* To solve this, one approach is to add the "-thread" option when using * To solve this, one approach is to add the "-thread" option when using
* the "threads" package using the previous plugin. * the "threads" package using the previous plugin.
*) *)
flag ["ocaml"; "pkg_threads"; "compile"] (S[A "-thread"]); flag ["ocaml"; "pkg_threads"; "compile"] (S[A "-thread"]);
flag ["ocaml"; "pkg_threads"; "doc"] (S[A "-I"; A "+threads"]); flag ["ocaml"; "pkg_threads"; "doc"] (S[A "-I"; A "+threads"]);
flag ["ocaml"; "pkg_threads"; "link"] (S[A "-thread"]); flag ["ocaml"; "pkg_threads"; "link"] (S[A "-thread"]);
flag ["ocaml"; "pkg_threads"; "infer_interface"] (S[A "-thread"]); flag ["ocaml"; "pkg_threads"; "infer_interface"] (S[A "-thread"]);
flag ["ocaml"; "package(threads)"; "compile"] (S[A "-thread"]); flag ["c"; "pkg_threads"; "compile"] (S[A "-thread"]);
flag ["ocaml"; "package(threads)"; "doc"] (S[A "-I"; A "+threads"]); flag ["ocaml"; "package(threads)"; "compile"] (S[A "-thread"]);
flag ["ocaml"; "package(threads)"; "link"] (S[A "-thread"]); flag ["ocaml"; "package(threads)"; "doc"] (S[A "-I"; A "+threads"]);
flag ["ocaml"; "package(threads)"; "infer_interface"] (S[A "-thread"]); flag ["ocaml"; "package(threads)"; "link"] (S[A "-thread"]);
flag ["ocaml"; "package(threads)"; "infer_interface"] (S[A "-thread"]);
flag ["c"; "package(threads)"; "compile"] (S[A "-thread"]);
| _ -> | _ ->
() ()
end end
module MyOCamlbuildBase = struct module MyOCamlbuildBase = struct
@ -594,9 +721,6 @@ module MyOCamlbuildBase = struct
*) *)
open Ocamlbuild_plugin open Ocamlbuild_plugin
module OC = Ocamlbuild_pack.Ocaml_compiler module OC = Ocamlbuild_pack.Ocaml_compiler
@ -607,9 +731,6 @@ module MyOCamlbuildBase = struct
type tag = string type tag = string
(* # 62 "src/plugins/ocamlbuild/MyOCamlbuildBase.ml" *)
type t = type t =
{ {
lib_ocaml: (name * dir list * string list) list; lib_ocaml: (name * dir list * string list) list;
@ -622,9 +743,7 @@ module MyOCamlbuildBase = struct
} }
let env_filename = (* # 110 "src/plugins/ocamlbuild/MyOCamlbuildBase.ml" *)
Pathname.basename
BaseEnvLight.default_filename
let dispatch_combine lst = let dispatch_combine lst =
@ -643,12 +762,7 @@ module MyOCamlbuildBase = struct
let dispatch t e = let dispatch t e =
let env = let env = BaseEnvLight.load ~allow_empty:true () in
BaseEnvLight.load
~filename:env_filename
~allow_empty:true
()
in
match e with match e with
| Before_options -> | Before_options ->
let no_trailing_dot s = let no_trailing_dot s =
@ -712,18 +826,19 @@ module MyOCamlbuildBase = struct
flag ["link"; "library"; "ocaml"; "native"; tag_libstubs lib] flag ["link"; "library"; "ocaml"; "native"; tag_libstubs lib]
(S[A"-cclib"; A("-l"^(nm_libstubs lib))]); (S[A"-cclib"; A("-l"^(nm_libstubs lib))]);
flag ["link"; "program"; "ocaml"; "byte"; tag_libstubs lib] if bool_of_string (BaseEnvLight.var_get "native_dynlink" env) then
(S[A"-dllib"; A("dll"^(nm_libstubs lib))]); flag ["link"; "program"; "ocaml"; "byte"; tag_libstubs lib]
(S[A"-dllib"; A("dll"^(nm_libstubs lib))]);
(* When ocaml link something that use the C library, then one (* When ocaml link something that use the C library, then one
need that file to be up to date. need that file to be up to date.
This holds both for programs and for libraries. This holds both for programs and for libraries.
*) *)
dep ["link"; "ocaml"; tag_libstubs lib] dep ["link"; "ocaml"; tag_libstubs lib]
[dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)]; [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)];
dep ["compile"; "ocaml"; tag_libstubs lib] dep ["compile"; "ocaml"; tag_libstubs lib]
[dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)]; [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)];
(* TODO: be more specific about what depends on headers *) (* TODO: be more specific about what depends on headers *)
(* Depends on .h files *) (* Depends on .h files *)
@ -763,7 +878,7 @@ module MyOCamlbuildBase = struct
end end
# 766 "myocamlbuild.ml" # 881 "myocamlbuild.ml"
open Ocamlbuild_plugin;; open Ocamlbuild_plugin;;
let package_default = let package_default =
{ {
@ -829,7 +944,7 @@ let conf = {MyOCamlbuildFindlib.no_automatic_syntax = false}
let dispatch_default = MyOCamlbuildBase.dispatch_default conf package_default;; let dispatch_default = MyOCamlbuildBase.dispatch_default conf package_default;;
# 833 "myocamlbuild.ml" # 948 "myocamlbuild.ml"
(* OASIS_STOP *) (* OASIS_STOP *)
let doc_intro = "doc/intro.txt" ;; let doc_intro = "doc/intro.txt" ;;

2
opam
View file

@ -1,6 +1,6 @@
opam-version: "1.2" opam-version: "1.2"
name: "containers" name: "containers"
version: "0.19" version: "0.20"
author: "Simon Cruanes" author: "Simon Cruanes"
maintainer: "simon.cruanes@inria.fr" maintainer: "simon.cruanes@inria.fr"
build: [ build: [

8300
setup.ml

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
# OASIS_START # OASIS_START
# DO NOT EDIT (digest: 56ec39bd73892c447789e2116b0f000e) # DO NOT EDIT (digest: 5fef39d6aa86c783d2d134baf25c1157)
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "bytes result" requires = "bytes result"
archive(byte) = "containers.cma" archive(byte) = "containers.cma"
@ -9,7 +9,7 @@ archive(native) = "containers.cmxa"
archive(native, plugin) = "containers.cmxs" archive(native, plugin) = "containers.cmxs"
exists_if = "containers.cma" exists_if = "containers.cma"
package "unix" ( package "unix" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "bytes unix" requires = "bytes unix"
archive(byte) = "containers_unix.cma" archive(byte) = "containers_unix.cma"
@ -20,7 +20,7 @@ package "unix" (
) )
package "top" ( package "top" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = requires =
"compiler-libs.common containers containers.data containers.bigarray containers.string containers.unix containers.sexp containers.iter" "compiler-libs.common containers containers.data containers.bigarray containers.string containers.unix containers.sexp containers.iter"
@ -32,7 +32,7 @@ package "top" (
) )
package "thread" ( package "thread" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "containers threads" requires = "containers threads"
archive(byte) = "containers_thread.cma" archive(byte) = "containers_thread.cma"
@ -43,7 +43,7 @@ package "thread" (
) )
package "string" ( package "string" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "bytes" requires = "bytes"
archive(byte) = "containers_string.cma" archive(byte) = "containers_string.cma"
@ -54,7 +54,7 @@ package "string" (
) )
package "sexp" ( package "sexp" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "bytes" requires = "bytes"
archive(byte) = "containers_sexp.cma" archive(byte) = "containers_sexp.cma"
@ -65,7 +65,7 @@ package "sexp" (
) )
package "iter" ( package "iter" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
archive(byte) = "containers_iter.cma" archive(byte) = "containers_iter.cma"
archive(byte, plugin) = "containers_iter.cma" archive(byte, plugin) = "containers_iter.cma"
@ -75,7 +75,7 @@ package "iter" (
) )
package "io" ( package "io" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "bytes" requires = "bytes"
archive(byte) = "containers_io.cma" archive(byte) = "containers_io.cma"
@ -86,7 +86,7 @@ package "io" (
) )
package "data" ( package "data" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "bytes" requires = "bytes"
archive(byte) = "containers_data.cma" archive(byte) = "containers_data.cma"
@ -97,7 +97,7 @@ package "data" (
) )
package "bigarray" ( package "bigarray" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "containers bigarray bytes" requires = "containers bigarray bytes"
archive(byte) = "containers_bigarray.cma" archive(byte) = "containers_bigarray.cma"
@ -108,7 +108,7 @@ package "bigarray" (
) )
package "advanced" ( package "advanced" (
version = "0.19" version = "0.20"
description = "A modular standard library focused on data structures." description = "A modular standard library focused on data structures."
requires = "containers sequence" requires = "containers sequence"
archive(byte) = "containers_advanced.cma" archive(byte) = "containers_advanced.cma"