thakis created this revision.
thakis added a reviewer: zturner.
Herald added a subscriber: delcypher.
Herald added a reviewer: serge-sans-paille.

`LLVMConfig.with_environment()` uses `os.path.normcase(os.path.normpath(x))` to 
normalize temporary env vars. `LLVMConfig.use_clang()` uses 
`with_environment()` to temporarily set `PATH` and then look for clang there. 
This means that on Windows, clang will be run with a path like 
`c:\foo\bin\clang.EXE` (with a lower-case "C:").

`lit.util.which()` used to not do this, which means the executables added in 
clang/test/lit.cfg.py (e.g. c-index-test) were run with a path like 
`C:\foo\bin\c-index-test.EXE` (because both CMake and GN happen to write 
`clang_tools_dir` with an upper-case C to lit.site.cfg.py).

clang/test/Index/pch-from-libclang.c requires that both c-index-test and clang 
use _exactly_ the same resource dir path (same case and everything), because a 
hash of the resource directory is used as module cache path.

This patch is necessary but not sufficient to make pch-from-libclang.c pass on 
Windows.


https://reviews.llvm.org/D57343

Files:
  llvm/utils/lit/lit/util.py


Index: llvm/utils/lit/lit/util.py
===================================================================
--- llvm/utils/lit/lit/util.py
+++ llvm/utils/lit/lit/util.py
@@ -197,7 +197,7 @@
 
     # Check for absolute match first.
     if os.path.isabs(command) and os.path.isfile(command):
-        return os.path.normpath(command)
+        return os.path.normcase(os.path.normpath(command))
 
     # Would be nice if Python had a lib function for this.
     if not paths:
@@ -215,7 +215,7 @@
         for ext in pathext:
             p = os.path.join(path, command + ext)
             if os.path.exists(p) and not os.path.isdir(p):
-                return os.path.normpath(p)
+                return os.path.normcase(os.path.normpath(p))
 
     return None
 


Index: llvm/utils/lit/lit/util.py
===================================================================
--- llvm/utils/lit/lit/util.py
+++ llvm/utils/lit/lit/util.py
@@ -197,7 +197,7 @@
 
     # Check for absolute match first.
     if os.path.isabs(command) and os.path.isfile(command):
-        return os.path.normpath(command)
+        return os.path.normcase(os.path.normpath(command))
 
     # Would be nice if Python had a lib function for this.
     if not paths:
@@ -215,7 +215,7 @@
         for ext in pathext:
             p = os.path.join(path, command + ext)
             if os.path.exists(p) and not os.path.isdir(p):
-                return os.path.normpath(p)
+                return os.path.normcase(os.path.normpath(p))
 
     return None
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to