https://github.com/JDevlieghere created https://github.com/llvm/llvm-project/pull/95582
Avoid copying the Python interpreter when running in a virtual environment as it will already have its own copy of the Python interpreter. Also leave a breadcrumb that we're running with a different Python interpreter. >From 76e0dd2cef42105f5112a19a7f5c822939e5fdf1 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Fri, 14 Jun 2024 11:41:54 -0700 Subject: [PATCH] [lldb] Tweak Python interpreter workaround on macOS Avoid copying the Python interpreter when running in a virtual environment as it will already have its own copy of the Python interpreter. Also leave a breadcrumb that we're running with a different Python interpreter. --- lldb/test/API/lit.cfg.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lldb/test/API/lit.cfg.py b/lldb/test/API/lit.cfg.py index d934349fe3ca3..1e99c8cb95d16 100644 --- a/lldb/test/API/lit.cfg.py +++ b/lldb/test/API/lit.cfg.py @@ -58,6 +58,15 @@ def find_shlibpath_var(): # enabled, we can't inject libraries into system binaries at all, so we need a # copy of the "real" python to work with. def find_python_interpreter(): + # This is only necessary when using DYLD_INSERT_LIBRARIES. + if "DYLD_INSERT_LIBRARIES" not in config.environment: + return None + + # If we're running in a virtual environment, we already have a copy of the + # Python executable. + if "VIRTUAL_ENV" in config.environment: + return None + # Avoid doing any work if we already copied the binary. copied_python = os.path.join(config.lldb_build_directory, "copied-python") if os.path.isfile(copied_python): @@ -84,7 +93,7 @@ def find_python_interpreter(): # RPATH and cannot be copied. try: # We don't care about the output, just make sure it runs. - subprocess.check_output([copied_python, "-V"], stderr=subprocess.STDOUT) + subprocess.check_call([copied_python, "-V"]) except subprocess.CalledProcessError: # The copied Python didn't work. Assume we're dealing with the Python # interpreter in Xcode. Given that this is not a system binary SIP @@ -130,8 +139,13 @@ def delete_module_cache(path): "libclang_rt.tsan_osx_dynamic.dylib" ) -if "DYLD_INSERT_LIBRARIES" in config.environment and platform.system() == "Darwin": - config.python_executable = find_python_interpreter() +if platform.system() == "Darwin": + python_executable = find_python_interpreter() + if python_executable: + lit_config.note( + "Using {} instead of {}".format(python_executable, config.python_executable) + ) + config.python_executable = python_executable # Shared library build of LLVM may require LD_LIBRARY_PATH or equivalent. if is_configured("shared_libs"): _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits