diff options
| author | David Tolnay <dtolnay@gmail.com> | 2022-06-24 17:55:40 -0700 |
|---|---|---|
| committer | David Tolnay <dtolnay@gmail.com> | 2022-06-24 18:03:09 -0700 |
| commit | 9169905eb2d0e5df5c554396495df49283812abc (patch) | |
| tree | 1637f700f8fcb44b0134b617058a3782f86f0415 /x.py | |
| parent | fdca237d5194bf8a1c9b437ebd2114d1c2ba6195 (diff) | |
| download | rust-9169905eb2d0e5df5c554396495df49283812abc.tar.gz rust-9169905eb2d0e5df5c554396495df49283812abc.zip | |
x.py: Support systems with only `python3` not `python`
Diffstat (limited to 'x.py')
| -rwxr-xr-x | x.py | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/x.py b/x.py index 4f64ea9fae8..0289056fdcb 100755 --- a/x.py +++ b/x.py @@ -1,5 +1,25 @@ -#!/usr/bin/env python +#!/usr/bin/env bash +# Modern Linux and macOS systems commonly only have a thing called `python3` and +# not `python`, while Windows commonly does not have `python3`, so we cannot +# directly use python in the shebang and have it consistently work. Instead we +# embed some bash to look for a python to run the rest of the script. +# +# On Windows, `py -3` sometimes works. We need to try it first because `python3` +# sometimes tries to launch the app store on Windows. +'''': +for PYTHON in "py -3" python3 python python2; do + if command -v $PYTHON >/dev/null; then + exec $PYTHON "$0" "$@" + break + fi +done +echo "$0: error: did not find python installed" >&2 +exit 1 +''' + +# The rest of this file is Python. +# # This file is only a "symlink" to bootstrap.py, all logic should go there. import os @@ -7,11 +27,12 @@ import sys # If this is python2, check if python3 is available and re-execute with that # interpreter. +# +# `./x.py` would not normally benefit from this because the bash above tries +# python3 before 2, but this matters if someone ran `python x.py` and their +# system's `python` is python2. if sys.version_info.major < 3: try: - # On Windows, `py -3` sometimes works. - # Try this first, because 'python3' sometimes tries to launch the app - # store on Windows os.execvp("py", ["py", "-3"] + sys.argv) except OSError: try: |
