This file is part of MXE. See LICENSE.md for licensing information.

Contains ad hoc patches for cross building.

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "fix@me" <fix@me>
Date: Wed, 3 Oct 2012 09:25:11 +0200
Subject: [PATCH 1/1] ocamlbuild : support for prefixed
 ocaml{c,opt,mklib,mktop,find} tools


diff --git a/ocamlbuild/findlib.ml b/ocamlbuild/findlib.ml
index 1111111..2222222 100644
--- a/ocamlbuild/findlib.ml
+++ b/ocamlbuild/findlib.ml
@@ -44,7 +44,7 @@ let report_error e =
   prerr_endline (string_of_error e);
   exit 2
 
-let ocamlfind = "ocamlfind"
+let ocamlfind = "@target@-ocamlfind"
 
 type package = {
   name: string;
diff --git a/ocamlbuild/options.ml b/ocamlbuild/options.ml
index 1111111..2222222 100644
--- a/ocamlbuild/options.ml
+++ b/ocamlbuild/options.ml
@@ -39,16 +39,17 @@ let use_menhir = ref false
 let catch_errors = ref true
 let use_ocamlfind = ref false
 
-let mk_virtual_solvers =
+let mk_virtual_solvers target =
   let dir = Ocamlbuild_where.bindir in
   List.iter begin fun cmd ->
-    let opt = cmd ^ ".opt" in
+	let target_cmd = target^cmd in
+    let opt = target_cmd ^ ".opt" in
     let a_opt = A opt in
-    let a_cmd = A cmd in
+    let a_cmd = A target_cmd in
     let search_in_path = memo Command.search_in_path in
     let solver () =
       if sys_file_exists !dir then
-        let long = filename_concat !dir cmd in
+        let long = filename_concat !dir target_cmd in
         let long_opt = long ^ ".opt" in
         if file_or_exe_exists long_opt then A long_opt
         else if file_or_exe_exists long then A long
@@ -61,9 +62,9 @@ let mk_virtual_solvers =
   end
 
 let () =
-  mk_virtual_solvers
-    ["ocamlc"; "ocamlopt"; "ocamldep"; "ocamldoc";
-    "ocamlyacc"; "menhir"; "ocamllex"; "ocamlmklib"; "ocamlmktop"; "ocamlfind"]
+  mk_virtual_solvers "@target@-" 
+	["ocamlc"; "ocamlopt"; "ocamldep"; "ocamlmklib"; "ocamlmktop"; "ocamlfind"];
+  mk_virtual_solvers "" ["ocamldoc"; "ocamlyacc"; "menhir"; "ocamllex"]
 let ocamlc = ref (V"OCAMLC")
 let ocamlopt = ref (V"OCAMLOPT")
 let ocamldep = ref (V"OCAMLDEP")
@@ -73,7 +74,7 @@ let ocamllex = ref (V"OCAMLLEX")
 let ocamlmklib = ref (V"OCAMLMKLIB")
 let ocamlmktop = ref (V"OCAMLMKTOP")
 let ocamlrun = ref N
-let ocamlfind x = S[V"OCAMLFIND"; x]
+let ocamlfind = (V"OCAMLFIND")
 let program_to_execute = ref false
 let must_clean = ref false
 let show_documentation = ref false
@@ -261,11 +262,19 @@ let init () =
     (* TODO: warning message when using an option such as -ocamlc *)
     (* Note that plugins can still modify these variables After_options.
        This design decision can easily be changed. *)
-    ocamlc := ocamlfind & A"ocamlc";
-    ocamlopt := ocamlfind & A"ocamlopt";
-    ocamldep := ocamlfind & A"ocamldep";
-    ocamldoc := ocamlfind & A"ocamldoc";
-    ocamlmktop := ocamlfind & A"ocamlmktop";
+	List.iter (fun (option,string) ->
+	  (match !option with
+	  | Sh s
+	  | A s ->
+		Log.eprintf "Warning : Command '-%s %s' overidden by option -use-ocamlfind" string s
+	  | _ -> ()
+	  );
+	  option := S[ocamlfind; A string]
+	) [(ocamlc,"ocamlc");
+	   (ocamlopt,"ocamlopt");
+	   (ocamldep,"ocamldep");
+	   (ocamldoc,"ocamldoc");
+	   (ocamlmktop,"ocamlmktop")]
   end;
 
   let reorder x y = x := !x @ (List.concat (List.rev !y)) in
