mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-26 13:01:27 +03:00
fd023cb122
I'm one of the rare cases that does have uv, but doesn't have python installed globally
56 lines
1.7 KiB
Bash
Executable File
56 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# 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 x.py shebang and have it consistently work. Instead we
|
|
# have a shell script to look for a python to run x.py.
|
|
|
|
set -eu
|
|
|
|
# syntax check
|
|
sh -n "$0"
|
|
|
|
realpath() {
|
|
local path="$1"
|
|
if [ -L "$path" ]; then
|
|
readlink -f "$path"
|
|
elif [ -d "$path" ]; then
|
|
# "cd" is not always silent (e.g. when CDPATH is set), so discard its output.
|
|
(cd -P "$path" >/dev/null && pwd)
|
|
else
|
|
echo "$(realpath "$(dirname "$path")")/$(basename "$path")"
|
|
fi
|
|
}
|
|
|
|
xpy=$(dirname "$(realpath "$0")")/x.py
|
|
|
|
# On Windows, `py -3` sometimes works. We need to try it first because `python3`
|
|
# sometimes tries to launch the app store on Windows.
|
|
# On MacOS, `py` tries to install "Developer command line tools". Try `python3` first.
|
|
# NOTE: running `bash -c ./x` from Windows doesn't set OSTYPE.
|
|
case ${OSTYPE:-} in
|
|
cygwin*|msys*) SEARCH="py python3 python python2 uv";;
|
|
*) SEARCH="python3 python py python2 uv";;
|
|
esac
|
|
for SEARCH_PYTHON in $SEARCH; do
|
|
if python=$(command -v $SEARCH_PYTHON) && [ -x "$python" ]; then
|
|
case $SEARCH_PYTHON in
|
|
py)
|
|
extra_arg="-3";;
|
|
uv)
|
|
extra_arg="run";;
|
|
*)
|
|
extra_arg="";;
|
|
esac
|
|
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
|