about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlbert Larsan <74931857+albertlarsan68@users.noreply.github.com>2022-10-13 10:20:39 +0200
committerAlbert Larsan <74931857+albertlarsan68@users.noreply.github.com>2022-10-31 08:33:24 +0100
commitc83ddaef948e5aadf3e64169dd3ab4268834fbff (patch)
treefd04346a5e9a8dc8af7516a47b0b13d1e89dedad
parent4596f4f8b565bdd02d3b99d1ab12ff09146a93de (diff)
downloadrust-c83ddaef948e5aadf3e64169dd3ab4268834fbff.tar.gz
rust-c83ddaef948e5aadf3e64169dd3ab4268834fbff.zip
Add better python discovery
`x.ps1` and `x` will now search for python executables like `python3.9`
and `python3.10.exe`
-rwxr-xr-xx6
-rwxr-xr-xx.ps113
2 files changed, 18 insertions, 1 deletions
diff --git a/x b/x
index 704d0f791f3..4309b82627c 100755
--- a/x
+++ b/x
@@ -29,5 +29,11 @@ for SEARCH_PYTHON in py python3 python python2; do
         exec "$python" $extra_arg "$xpy" "$@"
     fi
 done
+
+python=$(bash -c "compgen -c python" | grep '^python[2-3]\.[0-9]\+$' | head -n1)
+if ! [ "$python" = "" ]; then
+    exec "$python" "$xpy" "$@"
+fi
+
 echo "$0: error: did not find python installed" >&2
 exit 1
diff --git a/x.ps1 b/x.ps1
index 86cea606591..81b98919f43 100755
--- a/x.ps1
+++ b/x.ps1
@@ -10,11 +10,15 @@ foreach ($arg in $args) {
     $xpy_args += """$arg"""
 }
 
+function Get-Application($app) {
+    return Get-Command $app -ErrorAction SilentlyContinue -CommandType Application
+}
+
 foreach ($python in "py", "python3", "python", "python2") {
     # NOTE: this only tests that the command exists in PATH, not that it's actually
     # executable. The latter is not possible in a portable way, see
     # https://github.com/PowerShell/PowerShell/issues/12625.
-    if (Get-Command $python -ErrorAction SilentlyContinue) {
+    if (Get-Application $python) {
         if ($python -eq "py") {
             # Use python3, not python2
             $xpy_args = @("-3") + $xpy_args
@@ -24,5 +28,12 @@ foreach ($python in "py", "python3", "python", "python2") {
     }
 }
 
+$found = (Get-Application "python*" | Where-Object {$_.name -match '^python[2-3]\.[0-9]+(\.exe)?$'})
+if (($null -ne $found) -and ($found.Length -ge 1)) {
+    $python = $found[0]
+    $process = Start-Process -NoNewWindow -Wait -PassThru $python $xpy_args
+    Exit $process.ExitCode
+}
+
 Write-Error "${PSCommandPath}: error: did not find python installed"
 Exit 1