-
Notifications
You must be signed in to change notification settings - Fork 0
/
myocamlbuild.ml
76 lines (60 loc) · 2.3 KB
/
myocamlbuild.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
(* ocamlbuild script of libinput *)
open Ocamlbuild_plugin
open Ocamlbuild_pack
let run_and_read = Ocamlbuild_pack.My_unix.run_and_read
let mark_tag_used = Ocamlbuild_pack.Flags.mark_tag_used
let split s ch =
let x = ref [] in
let rec go s =
let pos = String.index s ch in
x := (String.before s pos)::!x;
go (String.after s (pos + 1))
in
try go s
with Not_found -> !x
let split_nl s = split s '\n'
let before_space s =
try String.before s (String.index s ' ')
with Not_found -> s
(* this lists all supported packages *)
let find_packages () =
List.map before_space (split_nl & run_and_read "ocamlfind list")
(* ocamlfind command *)
let ocamlfind x = S[A"ocamlfind"; x]
let _ = dispatch begin function
| Before_options ->
(* override default commands by ocamlfind ones *)
Options.ocamlc := ocamlfind & A"ocamlc";
Options.ocamlopt := ocamlfind & A"ocamlopt";
Options.ocamldep := ocamlfind & A"ocamldep";
Options.ocamldoc := ocamlfind & A"ocamldoc";
Options.ocamlmktop := ocamlfind & A"ocamlmktop";
(* taggings *)
tag_any
["pkg_str";
"pkg_unix";
"pkg_yojson";
"pkg_batteries";
];
tag_file "unittest/test_input.ml" ["pkg_oUnit"];
tag_file "unittest/test_input.native" ["pkg_oUnit"];
mark_tag_used "pkg_oUnit" (* to disable warning *)
| After_rules ->
(* When one link an OCaml library/binary/package, one should use -linkpkg *)
flag ["ocaml"; "link"; "program"] & A"-linkpkg";
(* For each ocamlfind package one inject the -package option when
* compiling, computing dependencies, generating documentation and
* linking. *)
List.iter begin fun pkg ->
flag ["ocaml"; "compile"; "pkg_"^pkg] & S[A"-package"; A pkg];
flag ["ocaml"; "ocamldep"; "pkg_"^pkg] & S[A"-package"; A pkg];
flag ["ocaml"; "doc"; "pkg_"^pkg] & S[A"-package"; A pkg];
flag ["ocaml"; "link"; "pkg_"^pkg] & S[A"-package"; A pkg];
flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S[A"-package"; A pkg];
end (find_packages ());
(* debugging & optimization *)
flag ["ocaml"; "compile"] (S[A"-g"]);
flag ["ocaml"; "link"] (S[A"-g"]);
flag ["ocaml"; "compile"; "native"] (S[A"-inline";A"10"]);
| _ -> ()
end