diff --git a/meson.sh b/meson.sh index ec508dcd48..43efbdf69e 100755 --- a/meson.sh +++ b/meson.sh @@ -6,13 +6,46 @@ # Usage: just like meson # Example: ./meson.sh setup build +# Check if ${1} < ${2}. +lt() { + # Sort numerically and check the first item. + lesser=$(printf '%s\n%s\n' "${1}" "${2}" | sort -V | head -n 1) + if test "${lesser}" = "${2}"; then + # ${1} >= ${2} + return 1 + fi + + # ${1} < ${2} + return 0 +} + if test ! -d venv; then - python3 -m venv ./venv - ./venv/bin/pip install --upgrade pip - # When meson 1.8 will be released, we can pin the versions. - ./venv/bin/pip install git+https://github.com/mesonbuild/meson.git - ./venv/bin/pip install ninja + # Starting with Meson 0.62, Python 3.7 is required. + python3=python3 + v=$(python3 -c 'import platform; print(platform.python_version())') + if lt "${v}" 3.7.0; then + # Search for a newer Python. + if command -V compgen >/dev/null; then + # shellcheck disable=SC3044 + # SC3044 (warning): In POSIX sh, 'compgen' is undefined. + newer=$(compgen -c python3 | sort -V | tail -n 1) + if test -n "${newer}"; then + python3="${newer}" + fi + fi + fi + + v=$("${python3}" -c 'import platform; print(platform.python_version())') + printf 'Python version: %s\n' "${v}" + + "${python3}" -m venv ./venv + ./venv/bin/pip install --upgrade pip + + # When meson 1.8 will be released, we can pin the versions. + ./venv/bin/pip install git+https://github.com/mesonbuild/meson.git + ./venv/bin/pip install ninja fi + # shellcheck disable=SC1091 # SC1091: Not following: ... was not specified as input (see shellcheck -x). . ./venv/bin/activate