diff -aur original/myocamlbuild.ml patched/myocamlbuild.ml --- original/myocamlbuild.ml 2010-02-06 18:26:58.000000000 +0100 +++ patched/myocamlbuild.ml 2010-01-24 19:33:59.000000000 +0100 @@ -151,8 +151,13 @@ Command.setup_virtual_command_solver "OCAMLOPT" ocamlopt_solver;; Command.setup_virtual_command_solver "OCAMLOPTWIN" (convert_for_windows_shell ocamlopt_solver);; +let ocamljava_solver () = S[A"./ocamljava.opt"; A"-nostdlib"];; + +Command.setup_virtual_command_solver "OCAMLJAVA" ocamljava_solver;; + let ocamlc = V"OCAMLC";; let ocamlopt = V"OCAMLOPT";; +let ocamljava = V"OCAMLJAVA";; let ar = A"ar";; @@ -214,6 +219,7 @@ flag ["ocaml"; "pp"; "camlp4boot"] (convert_command_for_windows_shell (S[ocamlrun; P hot_camlp4boot]));; flag ["ocaml"; "pp"; "camlp4boot"; "native"] (S[A"-D"; A"OPT"]);; +flag ["ocaml"; "pp"; "camlp4boot"; "java"] (S[A"-D"; A"OPT"]);; flag ["ocaml"; "pp"; "camlp4boot"; "pp:dep"] (S[A"-D"; A"OPT"]);; flag ["ocaml"; "pp"; "camlp4boot"; "pp:doc"] (S[A"-printer"; A"o"]);; let exn_tracer = Pathname.pwd/"camlp4"/"boot"/"Camlp4ExceptionTracer.cmo" in @@ -397,6 +403,19 @@ Nop end;; +rule "java stdlib in mixed mode" + ~stamp:"java_stdlib_mixed_mode" + ~deps:["stdlib/stdlib.mllib"; "stdlib/stdlib.cmja"; + "stdlib/stdlib.jar"] + begin fun env build -> + let (_ : Command.t) = + Ocamlbuild_pack.Ocaml_compiler.java_library_link_mllib + "stdlib/stdlib.mllib" "stdlib/stdlib.cmja" env build + in + import_stdlib_contents build ["cmi"]; + Nop + end;; + copy_rule' ~insert:`top "otherlibs/dynlink/natdynlink.ml" "otherlibs/dynlink/nat/dynlink.ml";; copy_rule' ~insert:`top "otherlibs/dynlink/dynlink.mli" "otherlibs/dynlink/nat/dynlink.mli";; copy_rule' ~insert:`top "otherlibs/dynlink/nat/dynlink.cmx" "otherlibs/dynlink/dynlink.cmx";; @@ -734,7 +753,9 @@ let camlp4lib_cma = p4 "camlp4lib.cma" let camlp4lib_cmxa = p4 "camlp4lib.cmxa" +let camlp4lib_cmja = p4 "camlp4lib.cmja" let camlp4lib_lib = p4 ("camlp4lib"-.-C.a) +let camlp4lib_jar = p4 "camlp4lib.jar" let special_modules = if Sys.file_exists "./boot/Profiler.cmo" then [camlp4Profiler] else [] @@ -785,24 +806,29 @@ let name = "camlp4"/name in let byte = name-.-"byte" in let native = name-.-"native" in - let unix_cma, unix_cmxa, include_unix = + let java = name ^ "-standalone.jar" in + let unix_cma, unix_cmxa, unix_cmja, include_unix = if link_unix - then A"unix.cma", A"unix.cmxa", S[A"-I"; P unix_dir] - else N,N,N in - let dep_unix_byte, dep_unix_native = + then A"unix.cma", A"unix.cmxa", A"unix.cmja", S[A"-I"; P unix_dir] + else N,N,N,N in + let dep_unix_byte, dep_unix_native, dep_unix_java = if link_unix && not mixed then [unix_dir/"unix.cma"], - [unix_dir/"unix.cmxa"; unix_dir/"unix"-.-C.a] - else [],[] in + [unix_dir/"unix.cmxa"; unix_dir/"unix"-.-C.a], + [unix_dir/"unix.cmja"; unix_dir/"unix.jar"] + else [],[],[] in let deps = special_modules @ modules @ [camlp4_bin] in let cmos = add_extensions ["cmo"] deps in let cmxs = add_extensions ["cmx"] deps in + let cmjs = add_extensions ["cmj"] deps in let objs = add_extensions [C.o] deps in - let dep_dynlink_byte, dep_dynlink_native = + let jos = add_extensions ["jo"] deps in + let dep_dynlink_byte, dep_dynlink_native, dep_dynlink_java = if mixed - then [], [] + then [], [], [] else [dynlink_dir/"dynlink.cma"], - [dynlink_dir/"dynlink.cmxa"; dynlink_dir/"dynlink"-.-C.a] + [dynlink_dir/"dynlink.cmxa"; dynlink_dir/"dynlink"-.-C.a], + [dynlink_dir/"dynlink.cmja"; dynlink_dir/"dynlink.jar"] in rule byte ~deps:(camlp4lib_cma::cmos @ dep_unix_byte @ dep_dynlink_byte) @@ -821,6 +847,17 @@ Cmd(S[ocamlopt; A"-I"; P dynlink_dir; A "dynlink.cmxa"; include_unix; unix_cmxa; T(tags_of_pathname native++"ocaml"++"link"++"native"); P camlp4lib_cmxa; A"-linkall"; atomize cmxs; A"-o"; Px (add_exe native)]) + end; + rule java + ~deps:(camlp4lib_cmja :: camlp4lib_jar :: (cmjs @ jos @ dep_unix_java @ dep_dynlink_java)) + ~prod:java + ~insert:(`before "ocaml: cmj* & jo* -> jar") + begin fun _ _ -> + Cmd(S[ocamljava; A"-I"; P dynlink_dir; A "dynlink.cmja"; include_unix; unix_cmja; + T(tags_of_pathname java++"ocaml"++"link"++"java"); + P camlp4lib_cmja; atomize cmjs; A"-standalone"; + A"-java-package"; A"ocaml.tools.camlp4"; + A"-o"; Px java]) end;; let mk_camlp4 name ?unix modules bin_mods top_mods =