summaryrefslogtreecommitdiff
path: root/llvm/utils/lit/lit/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/utils/lit/lit/util.py')
-rw-r--r--llvm/utils/lit/lit/util.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/llvm/utils/lit/lit/util.py b/llvm/utils/lit/lit/util.py
index d7afbdabcff9..40a16122b4fb 100644
--- a/llvm/utils/lit/lit/util.py
+++ b/llvm/utils/lit/lit/util.py
@@ -232,16 +232,24 @@ def which(command, paths=None):
# Get suffixes to search.
# On Cygwin, 'PATHEXT' may exist but it should not be used.
if os.pathsep == ';':
- pathext = os.environ.get('PATHEXT', '').split(';')
+ # Since this branch implies windows, it's safe to convert all extensions to lowercase.
+ assert(sys.platform == 'win32')
+ pathext = [x.lower() for x in os.environ.get('PATHEXT', '').split(';')]
+
+ # If the path was given to us with an extension already, ignore PATHEXT
+ _, current_ext = os.path.splitext(command)
+ if current_ext.lower() in pathext:
+ pathext = ['']
else:
pathext = ['']
# Search the paths...
for path in paths.split(os.pathsep):
+ p = os.path.join(path, command)
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.normcase(os.path.normpath(p))
+ p_with_ext = p + ext
+ if os.access(p_with_ext, os.X_OK):
+ return os.path.normcase(os.path.normpath(p_with_ext))
return None