summaryrefslogtreecommitdiff
path: root/lldb/bindings
diff options
context:
space:
mode:
authorMarkus Böck <markus.boeck02@gmail.com>2023-01-06 09:54:55 +0100
committerMarkus Böck <markus.boeck02@gmail.com>2023-01-06 09:58:35 +0100
commit9e84e038447e283d020ae01aebb15e0e66ef3642 (patch)
tree1ed74d8025accb22e854576a74ca8a70349f058c /lldb/bindings
parent241cb29187569274bbf327478e1665ff76528878 (diff)
downloadllvm-9e84e038447e283d020ae01aebb15e0e66ef3642.tar.gz
[lldb] Allow configuring on Windows with python interpreter within a junction
The current implementation nicely takes into account when the python interpreter is symlinked (or transitively within a symlinked directory). Sadly, `os.path.islink` returns `false` on Windows if instead of Windows symlinks, junctions are used. This has caused me issues after I started using `scoop` as my package manager on Windows, which creates junctions instead of symlinks. The fix proposed in this patch is to check whether `realpath` returns a different path to `exe`, and if it does, to simply try again with that path. The code could also be simplified since `sys.executable` is guaranteed to be absolute, and `os.readlink`, which can return a relative path, is no longer used. Tested on Windows 11 with Python 3.11 as interpreter and Ubuntu 18.04 with Python 3.6 Differential Revision: https://reviews.llvm.org/D141042
Diffstat (limited to 'lldb/bindings')
-rwxr-xr-xlldb/bindings/python/get-python-config.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/lldb/bindings/python/get-python-config.py b/lldb/bindings/python/get-python-config.py
index 32d82a54c160..6369e32a4916 100755
--- a/lldb/bindings/python/get-python-config.py
+++ b/lldb/bindings/python/get-python-config.py
@@ -51,8 +51,10 @@ def main():
break
except ValueError:
tried.append(exe)
- if os.path.islink(exe):
- exe = os.path.join(os.path.realpath(os.path.dirname(exe)), os.readlink(exe))
+ # Retry if the executable is symlinked or similar.
+ # This is roughly equal to os.path.islink, except it also works for junctions on Windows.
+ if os.path.realpath(exe) != exe:
+ exe = os.path.realpath(exe)
continue
else:
print("Could not find a relative path to sys.executable under sys.prefix", file=sys.stderr)