Skip to content

Commit

Permalink
[lldb/Test] Run dotest.py with the Python LLDB was built with.
Browse files Browse the repository at this point in the history
The Python used to run lit can be different from the Python LLDB was
build with. One scenario where this happens is when LLVM can find the
Python 3 interpreter, but not the Python 3 libraries, in which case LLDB
build and links against Python 3. Without this change, you end up with
an ModuleNotFoundError because of the mismatch.

Instead of looking at the Python interpreter that's used to run lit,
lldbtest should use the interpreter that matches the Python version LLDB
was build against.

Differential revision: https://reviews.llvm.org/D79519
  • Loading branch information
JDevlieghere committed May 6, 2020
1 parent 0a52401 commit 7c6420e
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions lldb/test/API/lldbtest.py
Expand Up @@ -62,10 +62,15 @@ def execute(self, test, litConfig):
return (lit.Test.UNSUPPORTED, 'Test is unsupported')

testPath, testFile = os.path.split(test.getSourcePath())

# The Python used to run lit can be different from the Python LLDB was
# build with.
executable = test.config.python_executable

# On Windows, the system does not always correctly interpret
# shebang lines. To make sure we can execute the tests, add
# python exe as the first parameter of the command.
cmd = [sys.executable] + self.dotest_cmd + [testPath, '-p', testFile]
cmd = [executable] + self.dotest_cmd + [testPath, '-p', testFile]

builddir = getBuildDir(cmd)
mkdir_p(builddir)
Expand All @@ -74,13 +79,13 @@ def execute(self, test, litConfig):
# libraries into system binaries, but this can be worked around by
# copying the binary into a different location.
if 'DYLD_INSERT_LIBRARIES' in test.config.environment and \
(sys.executable.startswith('/System/') or \
sys.executable.startswith('/usr/bin/')):
(executable.startswith('/System/') or \
executable.startswith('/usr/bin/')):
copied_python = os.path.join(builddir, 'copied-system-python')
if not os.path.isfile(copied_python):
import shutil, subprocess
python = subprocess.check_output([
sys.executable,
executable,
'-c',
'import sys; print(sys.executable)'
]).decode('utf-8').strip()
Expand Down

0 comments on commit 7c6420e

Please sign in to comment.