open Ocamlbuild_plugin open Command let includes = ref StringSet.empty let register_include 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]); "macro_define", (fun s -> S [A"-ppopt"; A ("-D"^s)]); ] let () = dispatch begin function | 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