aboutsummaryrefslogtreecommitdiff
path: root/lib/envars.ml
diff options
context:
space:
mode:
authorHugo Herbelin2015-05-20 14:36:41 +0200
committerHugo Herbelin2015-05-20 22:48:06 +0200
commit69941d4e195650bf59285b897c14d6287defea0f (patch)
tree572c43bd2c6ca5fd53d364a90b21e390bc50a87e /lib/envars.ml
parent5a52a74592496353d562d9f3e958fb59ab585531 (diff)
Continuing incomplete 4b5af0d6e9ec1 (on MacOS X, ensuring that files
found in the file system have the expected lowercase/uppercase spelling)
Diffstat (limited to 'lib/envars.ml')
-rw-r--r--lib/envars.ml19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/envars.ml b/lib/envars.ml
index b0eed8386b..ac0b6f722e 100644
--- a/lib/envars.ml
+++ b/lib/envars.ml
@@ -39,12 +39,25 @@ let path_to_list p =
let user_path () =
path_to_list (Sys.getenv "PATH") (* may raise Not_found *)
+ (* Duplicated from system.ml to minimize dependencies *)
+let file_exists_respecting_case f =
+ if Coq_config.arch = "Darwin" then
+ (* ensure that the file exists with expected case on the
+ case-insensitive but case-preserving default MacOS file system *)
+ let rec aux f =
+ let bf = Filename.basename f in
+ let df = Filename.dirname f in
+ String.equal df "." || String.equal df "/" ||
+ aux df && Array.exists (String.equal bf) (Sys.readdir df)
+ in aux f
+ else Sys.file_exists f
+
let rec which l f =
match l with
| [] ->
raise Not_found
| p :: tl ->
- if Sys.file_exists (p / f) then
+ if file_exists_respecting_case (p / f) then
p
else
which tl f
@@ -102,7 +115,7 @@ let _ =
If the check fails, then [oth ()] is evaluated. *)
let check_file_else ~dir ~file oth =
let path = if Coq_config.local then coqroot else coqroot / dir in
- if Sys.file_exists (path / file) then path else oth ()
+ if file_exists_respecting_case (path / file) then path else oth ()
let guess_coqlib fail =
let prelude = "theories/Init/Prelude.vo" in
@@ -134,7 +147,7 @@ let coqpath =
let coqpath = getenv_else "COQPATH" (fun () -> "") in
let make_search_path path =
let paths = path_to_list path in
- let valid_paths = List.filter Sys.file_exists paths in
+ let valid_paths = List.filter file_exists_respecting_case paths in
List.rev valid_paths
in
make_search_path coqpath