From c85c1c9ed520d28cbb34e10e1fe82c6ee37130bc Mon Sep 17 00:00:00 2001 From: native-api Date: Tue, 27 Jun 2023 01:36:04 +0300 Subject: [PATCH] Link python*-config into VE (#460) Required to build binaries that link against Python. Carl Meyer, the champion for PEP 0405, has confirmed that there isn't a particular reason why `venv` doesn't do that. --- bin/pyenv-virtualenv | 9 +++++++++ test/virtualenv.bats | 9 +++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/bin/pyenv-virtualenv b/bin/pyenv-virtualenv index 0bdfda5..e1919d9 100755 --- a/bin/pyenv-virtualenv +++ b/bin/pyenv-virtualenv @@ -600,6 +600,15 @@ else fi fi +( + shopt -s nullglob + for extra_binary in "$PREFIX"/bin/python*-config; do + extra_binary_linkname="$VIRTUALENV_PATH/bin/$(basename $extra_binary)" + [[ -e "$extra_binary_linkname" ]] || \ + ln -s "$extra_binary" "$extra_binary_linkname" + done +) + ## Create symlink in the `versions` directory for backward compatibility if [ -d "${VIRTUALENV_PATH}" ] && [ -n "${COMPAT_VIRTUALENV_PATH}" ]; then ln -fs "${VIRTUALENV_PATH}" "${COMPAT_VIRTUALENV_PATH}" diff --git a/test/virtualenv.bats b/test/virtualenv.bats index f297916..4084b4a 100644 --- a/test/virtualenv.bats +++ b/test/virtualenv.bats @@ -29,10 +29,13 @@ unstub_pyenv() { stub pyenv-exec "python2.7 -m venv --help : false" stub pyenv-exec "python2 -m venv --help : false" stub pyenv-exec "python -m venv --help : false" - stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"" + stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\"; mkdir -p \"\$2/bin\"" stub pyenv-exec "python -s -m ensurepip : false" stub pyenv-exec "python -s */get-pip.py : true" stub curl true + create_executable "${PYENV_VERSION}" "python-config" + create_executable "${PYENV_VERSION}" "python2-config" + create_executable "${PYENV_VERSION}" "python2.7-config" run pyenv-virtualenv "2.7.11" "venv" @@ -41,8 +44,10 @@ PYENV_VERSION=2.7.11 virtualenv ${PYENV_ROOT}/versions/2.7.11/envs/venv Installing pip from https://bootstrap.pypa.io/pip/2.7/get-pip.py... rehashed OUT - assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/pydoc" ] assert_success + for x in pydoc python-config python2-config python2.7-config; do + assert [ -x "${PYENV_ROOT}/versions/2.7.11/envs/venv/bin/$x" ] + done unstub_pyenv unstub pyenv-virtualenv-prefix