diff --git a/src/bin.mli b/src/bin.mli index 0c927b00..7559442a 100644 --- a/src/bin.mli +++ b/src/bin.mli @@ -1,5 +1,7 @@ (** OCaml binaries *) +(** Character used to separate entries in [PATH] and similar + environment variables *) val path_sep : char (** Contents of [PATH] *) diff --git a/src/context.ml b/src/context.ml index b358f05c..60d373ad 100644 --- a/src/context.ml +++ b/src/context.ml @@ -255,18 +255,25 @@ let create ~(kind : Kind.t) ~path ~env ~name ~merlin ~targets () = in let env = let cwd = Sys.getcwd () in - let extend_var var v = + let ocamlpath_sep = + if Sys.cygwin then + (* because that's what ocamlfind expects *) + ';' + else + Bin.path_sep + in + let extend_var var ?(path_sep=Bin.path_sep) v = let v = Filename.concat cwd (Path.to_string v) in match Env.get env var with | None -> (var, v) - | Some prev -> (var, sprintf "%s%c%s" v Bin.path_sep prev) + | Some prev -> (var, sprintf "%s%c%s" v path_sep prev) in let vars = [ extend_var "CAML_LD_LIBRARY_PATH" (Path.relative (Config.local_install_dir ~context:name) "lib/stublibs") - ; extend_var "OCAMLPATH" + ; extend_var "OCAMLPATH" ~path_sep:ocamlpath_sep (Path.relative (Config.local_install_dir ~context:name) "lib") @@ -399,7 +406,7 @@ let create_for_opam ?root ~targets ~switch ~name ?(merlin=false) () = in let path = match Env.Map.find vars "PATH" with - | None -> Bin.path + | None -> Bin.path | Some s -> Bin.parse_path s in let env = Env.extend (Env.initial ()) ~vars in