forked from rust-lang/rust
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathx
More file actions
Latest commit
executable file
·55 lines (47 loc) · 1.66 KB
/
Copy pathx
File metadata and controls
executable file
·55 lines (47 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/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
forSEARCH_PYTHONin$SEARCH;do
if python=$(command -v $SEARCH_PYTHON)&& [ -x"$python" ];then
case$SEARCH_PYTHONin
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 -E '^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