X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=myocamlbuild.ml;h=0ea5ff0097df2a0e8d24edecff73593f1e46cd77;hp=a1fe8e98e993a1c4b603ba13d6d0c9fdc4c8af2f;hb=9b3611f8b650edf4183169a9c2c4317e13be536d;hpb=29afc3e757d710479de98f3077698a350f810cef diff --git a/myocamlbuild.ml b/myocamlbuild.ml index a1fe8e9..0ea5ff0 100644 --- a/myocamlbuild.ml +++ b/myocamlbuild.ml @@ -1,15 +1,23 @@ open Ocamlbuild_plugin open Command -let includes = Hashtbl.create 17 +let includes = ref StringSet.empty + let register_include dir = - if not (Hashtbl.mem includes dir) then begin - Hashtbl.add includes dir (); + if not (StringSet.mem dir !includes) then begin + includes := StringSet.add dir !includes; dep [ "extension:ml" ] (List.map (fun s -> dir ^ "/" ^ s ) (Array.to_list (Pathname.readdir dir))) end +let set_flags tag_list action_list = + List.iter (fun s -> + List.iter (fun (fl, fu) -> + pflag s fl fu) + action_list + ) tag_list + let macro_flags = [ "macro_include", (fun s -> register_include s; S [A"-ppopt"; A "-I"; A"-ppopt"; A s]); @@ -18,13 +26,26 @@ let macro_flags = [ let () = dispatch begin function - | Before_rules -> - List.iter (fun s -> - List.iter (fun (fl, fu) -> - pflag s fl fu) macro_flags - ) - [["ocaml";"compile"]; - ["ocaml";"ocamldep"] ] -; + | Before_rules -> () + | After_rules -> + set_flags [["ocaml";"compile"]; ["ocaml";"ocamldep"] ] macro_flags; + pflag [ "ocaml"; "compile" ] "warning" (fun s -> (S[ A"-w"; A s])); + flag [ "ocaml"; "compile"; "debug" ] (S[ A"-g"; A"-ppopt"; A"-DDEBUG"]); + flag [ "ocaml"; "link"; "debug" ] (A"-g"); + flag [ "ocaml"; "compile"; "profile"] (S[A"-ppopt"; A"-DPROFILE"]); + flag [ "ocaml"; "compile"; "profile"; "native"] (A"-p"); + flag [ "ocaml"; "link"; "profile"; "native"] (A"-p"); + pflag [ "ocaml"; "compile"; "native" ] "inline" (fun i -> (S[ A"-inline"; A i ])); + pflag [ "ocaml"; "compile" ] "unsafe" (fun s -> (if s = "true" then S[A"-ppopt";A "-unsafe"] else N)); + + + rule "Java compilation" + ~prod:"%.class" + ~dep:"%.java" + begin fun env _build -> + let java = env "%.java" in + let tags = tags_of_pathname java ++ "compile" in + Cmd( S[ A"javac" ; P java; T tags ]) + end | _ -> () end