diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build index 5cc272ea..34e6ab28 100755 --- a/plugins/python-build/bin/python-build +++ b/plugins/python-build/bin/python-build @@ -1000,15 +1000,20 @@ build_package_jython_builder() { build_package_pyston() { build_package_copy - # Pyston tarballs provide an executable with a version-specific naming scheme # and `pyston` and `pyston3` symlinks to it. - # Add the `python', `pythonX' and `pythonX.Y' symlinks as per PEP 394. + build_package_make_python_symlinks pyston +} + +# Add missing `python', `pythonX' and `pythonX.Y' symlinks as per PEP 394. +build_package_make_python_symlinks() { + seeder="${1:?}" local real_interpreter version_suffix - real_interpreter=$(resolve_link "${PREFIX_PATH}/bin/pyston" || echo pyston) - version_suffix=$("${PREFIX_PATH}/bin/pyston" -c 'import sys; print("%d.%d" % sys.version_info[:2])' 2>&4) + real_interpreter=$(resolve_link "${PREFIX_PATH}/bin/$seeder" || echo $seeder) + # Use syntax accepted in both Py2 and Py3. Even though current Py2 holdouts (e.g. PyPy) support e.g. print() + version_suffix=$("${PREFIX_PATH}/bin/$seeder" -c 'import sys; sys.stdout.write("%d.%d\n" % sys.version_info[:2])' 2>&4) for name in python "python${version_suffix%.*}" "python${version_suffix}"; do - ln -fs "${real_interpreter}" "${PREFIX_PATH}/bin/$name" + [[ -e "${PREFIX_PATH}/bin/$name" ]] || ln -fs "${real_interpreter}" "${PREFIX_PATH}/bin/$name" done } @@ -1110,22 +1115,15 @@ build_package_graalpython() { build_package_pypy() { build_package_copy - mkdir -p "${PREFIX_PATH}/bin" "${PREFIX_PATH}/lib" local bin shopt -s nullglob - for bin in "bin/"*; do - if [ -f "${bin}" ] && [ -x "${bin}" ] && [ ! -L "${bin}" ]; then - case "${bin##*/}" in - "libpypy"* ) - ( cd "${PREFIX_PATH}/lib" && ln -fs "../bin/${bin##*/}" "${bin##*/}" ) - ;; - "pypy"* ) - ( cd "${PREFIX_PATH}/bin" && ln -fs "${bin##*/}" "python" ) - ;; - esac + for bin in "bin/libpypy"*; do + if [[ -f "${bin}" && -x "${bin}" && ! -L "${bin}" ]]; then + ln -fs "../bin/${bin##*/}" "${PREFIX_PATH}/lib/${bin##*/}" fi done shopt -u nullglob + build_package_make_python_symlinks "pypy" } build_package_pypy_builder() { diff --git a/plugins/python-build/test/pyenv_ext.bats b/plugins/python-build/test/pyenv_ext.bats index 27927164..1a9c94bf 100644 --- a/plugins/python-build/test/pyenv_ext.bats +++ b/plugins/python-build/test/pyenv_ext.bats @@ -264,6 +264,26 @@ OUT done } +@test "pypy: create python* symlinks" { + mkdir -p "${BATS_TEST_TMPDIR}/pypy/bin" + cd "${BATS_TEST_TMPDIR}/pypy" + executable bin/real_interpreter_name <