[Lldb-commits] [lldb] 7137526 - [lldb] Use shutil.which in Shell tests find_executable
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Fri Apr 29 03:01:31 PDT 2022
Author: David Spickett
Date: 2022-04-29T10:01:26Z
New Revision: 713752610edd3d8766f56e2704bb7241434cd15b
URL: https://github.com/llvm/llvm-project/commit/713752610edd3d8766f56e2704bb7241434cd15b
DIFF: https://github.com/llvm/llvm-project/commit/713752610edd3d8766f56e2704bb7241434cd15b.diff
LOG: [lldb] Use shutil.which in Shell tests find_executable
In build.py we have our own find_executable that looks
a lot like the distutils one that I switched to shutil.which.
This find_executable isn't quite the same as shutil.which
so I've refactored it to call that in the correct way.
Note that the path passed to shutil.which is in the form that
PATH would be, meaning separators are allowed.
```
>>> shutil.which("gcc", path="/home/david.spickett:/bin")
'/bin/gcc'
```
We just need to make sure it doesn't ignore the existing PATH
and normalise the result if it does find the binary.
The .exe extension is automatically added to the binary name
if we are on Windows.
Depends on D124601
Reviewed By: JDevlieghere
Differential Revision: https://reviews.llvm.org/D124604
Added:
Modified:
lldb/test/Shell/helper/build.py
Removed:
################################################################################
diff --git a/lldb/test/Shell/helper/build.py b/lldb/test/Shell/helper/build.py
index 005f12bc09cf..97d790661d5a 100755
--- a/lldb/test/Shell/helper/build.py
+++ b/lldb/test/Shell/helper/build.py
@@ -4,6 +4,7 @@
import argparse
import os
+import shutil
import signal
import subprocess
import sys
@@ -170,16 +171,14 @@ def print_environment(env):
print(' {0} = {1}'.format(e, formatted_value))
def find_executable(binary_name, search_paths):
- if sys.platform == 'win32':
- binary_name = binary_name + '.exe'
-
- search_paths = os.pathsep.join(search_paths)
- paths = search_paths + os.pathsep + os.environ.get('PATH', '')
- for path in paths.split(os.pathsep):
- p = os.path.join(path, binary_name)
- if os.path.exists(p) and not os.path.isdir(p):
- return os.path.normpath(p)
- return None
+ # shutil.which will ignore PATH if given a path argument, we want to include it.
+ search_paths.append(os.environ.get('PATH', ''))
+ search_path = os.pathsep.join(search_paths)
+ binary_path = shutil.which(binary_name, path=search_path)
+ if binary_path is not None:
+ # So for example, we get '/bin/gcc' instead of '/usr/../bin/gcc'.
+ binary_path = os.path.normpath(binary_path)
+ return binary_path
def find_toolchain(compiler, tools_dir):
if compiler == 'msvc':
More information about the lldb-commits
mailing list