From 34eeb8cc99f0360277fda317531e6186dd55e8c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mauricio=20Fern=C3=A1ndez?= <mauricio.fernandez@ahrefs.com> Date: Fri, 1 Jul 2022 23:53:51 +0200 Subject: [PATCH] Fix ocamldep-postproc in case-insensitive, case-preserving filesystems. --- src/builtin/omake_builtin_ocamldep.ml | 6 +----- src/ir/omake_cache.ml | 11 ++++++++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/builtin/omake_builtin_ocamldep.ml b/src/builtin/omake_builtin_ocamldep.ml index 56f3007..8ce4187 100644 --- a/src/builtin/omake_builtin_ocamldep.ml +++ b/src/builtin/omake_builtin_ocamldep.ml @@ -37,11 +37,7 @@ let ocamldep_postproc venv pos loc args = try let name1 = String.uncapitalize_ascii name and name2 = String.capitalize_ascii name in - let names = (* check name with orignal case first *) - if name1 = name then - [name1; name2] - else - [name2; name1] in + let names = (* check name with uncapitalized case first *) [name1; name2] in match Omake_target.target_is_buildable_in_path_1 cache venv pos path names with | Some node -> Some (Omake_env.venv_nodename venv node) diff --git a/src/ir/omake_cache.ml b/src/ir/omake_cache.ml index 04e5461..fe52bb5 100644 --- a/src/ir/omake_cache.ml +++ b/src/ir/omake_cache.ml @@ -779,6 +779,12 @@ let has_file_stat ?compact_stat ?digest cache node = has_file_stat_1 ?compact_stat ?digest cache node +let unix_filename_exists path = + let basedir = Filename.dirname path in + let basename = Filename.basename path in + basename = "." || basename = ".." || Array.exists (String.equal basename) (Sys.readdir basedir) + + let stat_unix_node cache ~force node = (* We used to cache this information, but don't do this anymore. Hence, the [force] flag is ignored: we always re-stat @@ -787,6 +793,7 @@ let stat_unix_node cache ~force node = let name = Omake_node.Node.fullname node in try let s = Unix.LargeFile.stat name in + if not @@ unix_filename_exists name then raise (Sys_error ""); ex_set cache node true; s with @@ -806,7 +813,9 @@ let lstat_unix_node _cache ~force node = ignore(force); let name = Omake_node.Node.fullname node in try - Unix.LargeFile.lstat name + let s = Unix.LargeFile.lstat name in + if not @@ unix_filename_exists name then raise (Sys_error ""); + s with Unix.Unix_error _ | Sys_error _ ->