zero9178 created this revision.
zero9178 added reviewers: JDevlieghere, lawrence_danna, clayborg, labath,
jingham.
Herald added a project: All.
zero9178 requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
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 interpereter and Ubuntu 18.04 with
Python 3.6
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D141042
Files:
lldb/bindings/python/get-python-config.py
Index: lldb/bindings/python/get-python-config.py
===================================================================
--- lldb/bindings/python/get-python-config.py
+++ lldb/bindings/python/get-python-config.py
@@ -51,8 +51,10 @@
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)
Index: lldb/bindings/python/get-python-config.py
===================================================================
--- lldb/bindings/python/get-python-config.py
+++ lldb/bindings/python/get-python-config.py
@@ -51,8 +51,10 @@
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)
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits