| #!/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 -P "$path" && 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. |
| for SEARCH_PYTHON in py python3 python python2; do |
| if python=$(command -v $SEARCH_PYTHON) && [ -x "$python" ]; then |
| if [ $SEARCH_PYTHON = py ]; then |
| extra_arg="-3" |
| else |
| extra_arg="" |
| fi |
| 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 |