+++ /dev/null
-(* Wrapper around 'gcc'. On MinGW, this wrapper understands the '@...'\r
- * syntax for extending the command line.\r
- *)\r
-\r
-open Printf\r
-open Unix\r
-\r
-let (//) = Filename.concat\r
-\r
-(* Substitute any @... arguments with the file content. *)\r
-let rec input_all_lines chan =\r
- try\r
- let line = input_line chan in\r
- line :: input_all_lines chan\r
- with\r
- End_of_file -> []\r
-\r
-let argv = Array.map (\r
- fun arg ->\r
- if arg.[0] = '@' then (\r
- let chan = open_in (String.sub arg 1 (String.length arg - 1)) in\r
- let lines = input_all_lines chan in\r
- close_in chan;\r
- lines\r
- ) else\r
- [arg]\r
-) Sys.argv\r
-\r
-let argv = Array.to_list argv\r
-let argv = List.flatten argv\r
-\r
-(* Find the real gcc.exe on $PATH, but ignore any '.' elements in the path.\r
- * Note that on Windows, $PATH is split with ';' characters.\r
- *)\r
-let rec split_find str sep f =\r
- try\r
- let i = String.index str sep in\r
- let n = String.length str in\r
- let str, str' = String.sub str 0 i, String.sub str (i+1) (n-i-1) in\r
- match f str with\r
- | None -> split_find str' sep f (* not found, keep searching *)\r
- | Some found -> found\r
- with\r
- Not_found ->\r
- match f str with\r
- | None -> raise Not_found (* not found at all *)\r
- | Some found -> found\r
-\r
-let exists filename =\r
- try access filename [F_OK]; true with Unix_error _ -> false\r
-\r
-let gcc =\r
- split_find (Sys.getenv "PATH") ';'\r
- (function\r
- | "." -> None (* ignore current directory in path *)\r
- | path ->\r
- let gcc = path // "gcc.exe" in\r
- if exists gcc then Some gcc else None)\r
-\r
-(* Finally execute the real gcc with the full argument list.\r
- * Can't use execv here because then the parent process (ocamlopt) thinks\r
- * that this process has finished and deletes all the temp files. Stupid\r
- * Windoze!\r
- *)\r
-let _ =\r
- let argv = List.map Filename.quote (List.tl argv) in\r
- let cmd = String.concat " " (gcc :: argv) in\r
- eprintf "mingw-gcc-wrapper: %s\n%!" cmd;\r
- let r = Sys.command cmd in\r
- exit r\r