forked from ocaml/opam
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild-putenv.ml
36 lines (35 loc) · 1.14 KB
/
build-putenv.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#directory "+unix";;
#load "unix.cma"
let () =
let (prefix, suffix) =
let c = open_in Sys.argv.(3) in
let prefix = input_line c in
let suffix = input_line c in
let rec f () =
match input_line c with
| env -> g env
| exception End_of_file -> close_in c
and g env =
let elt = input_line c in
let elt = if elt.[String.length elt - 1] <> ';' then elt ^ ";" else elt in
let elt =
(* See https://support.microsoft.com/en-us/help/830473 *)
let l = String.length elt in
if l > 8191 then begin
Printf.eprintf "Variable %s has length %d which exceeds the maximum of 8191\n%!" env l;
exit 1
end else
let current = Unix.getenv env in
if String.length elt + String.length current > 8191 then begin
Printf.eprintf "Warning: replacing, rather than prepending %s\n%!" env;
elt
end else
elt ^ current
in
let () = Unix.putenv env elt in
f ()
in
f ();
(prefix, suffix)
in
exit (Sys.command (Printf.sprintf "%s%s%s-DUNICODE -D_UNICODE %s" prefix Sys.argv.(1) suffix Sys.argv.(2)))