Lock into an ecosystem once a lib from it is picked

also if Pyenv is installed wih Homebrew

Only use ecosystem root if it's locked in -- i.e. something was picked from it
This commit is contained in:
Ivan Pozdeev 2025-04-07 00:24:44 +03:00
parent 77cc57f2cb
commit 7c3b8667ff

View File

@ -122,6 +122,9 @@ is_mac() {
} }
can_use_homebrew() { can_use_homebrew() {
if locked_in; then
locked_in homebrew && rc=$? || rc=$?; return $rc
fi
[[ -n "$PYTHON_BUILD_USE_HOMEBREW" && -n "$PYTHON_BUILD_SKIP_HOMEBREW" ]] && { [[ -n "$PYTHON_BUILD_USE_HOMEBREW" && -n "$PYTHON_BUILD_SKIP_HOMEBREW" ]] && {
echo "error: mutually exclusive environment variables PYTHON_BUILD_USE_HOMEBREW and PYTHON_BUILD_SKIP_HOMEBREW are set" >&3 echo "error: mutually exclusive environment variables PYTHON_BUILD_USE_HOMEBREW and PYTHON_BUILD_SKIP_HOMEBREW are set" >&3
exit 1 exit 1
@ -131,11 +134,17 @@ can_use_homebrew() {
is_mac && command -v brew &>/dev/null && return 0 is_mac && command -v brew &>/dev/null && return 0
# In Linux, if Pyenv itself is installed with Homebrew, # In Linux, if Pyenv itself is installed with Homebrew,
# we assume the user wants to take dependencies from there as well by default # we assume the user wants to take dependencies from there as well by default
command -v brew &>/dev/null && [[ $(abs_dirname "${BASH_SOURCE}") == "$(abs_dirname "$(brew --prefix 2>/dev/null ||true)")"/* ]] && return 0 command -v brew &>/dev/null && [[ $(abs_dirname "${BASH_SOURCE}") == "$(abs_dirname "$(brew --prefix 2>/dev/null ||true)")"/* ]] &&
return 1 { lock_in homebrew; return 0; }
# do not check the same stuff multiple times
declare -g PYTHON_BUILD_SKIP_HOMEBREW=1; return 1
} }
can_use_macports() { can_use_macports() {
if locked_in; then
locked_in macports && rc=$? || rc=$?; return $rc
fi
[[ -n "$PYTHON_BUILD_USE_MACPORTS" && -n "$PYTHON_BUILD_SKIP_MACPORTS" ]] && { [[ -n "$PYTHON_BUILD_USE_MACPORTS" && -n "$PYTHON_BUILD_SKIP_MACPORTS" ]] && {
echo "error: mutually exclusive environment variables PYTHON_BUILD_USE_MACPORTS and PYTHON_BUILD_SKIP_MACPORTS are set" >&3 echo "error: mutually exclusive environment variables PYTHON_BUILD_USE_MACPORTS and PYTHON_BUILD_SKIP_MACPORTS are set" >&3
exit 1 exit 1
@ -143,7 +152,21 @@ can_use_macports() {
[[ -n "$PYTHON_BUILD_USE_MACPORTS" ]] && return 0 [[ -n "$PYTHON_BUILD_USE_MACPORTS" ]] && return 0
[[ -n "$PYTHON_BUILD_SKIP_MACPORTS" ]] && return 1 [[ -n "$PYTHON_BUILD_SKIP_MACPORTS" ]] && return 1
is_mac && command -v port &>/dev/null && return 0 is_mac && command -v port &>/dev/null && return 0
return 1
# do not check the same stuff multiple times
declare -g PYTHON_BUILD_SKIP_MACPORTS=1; return 1
}
locked_in() {
if [[ -z "$1" ]]; then
[[ -n $_PYTHON_BUILD_ECOSYSTEM_LOCKED_IN ]]
else
[[ $_PYTHON_BUILD_ECOSYSTEM_LOCKED_IN == "$1" ]]
fi
}
lock_in() {
declare -g _PYTHON_BUILD_ECOSYSTEM_LOCKED_IN=${1:?}
} }
# 9.1 -> 901 # 9.1 -> 901
@ -827,7 +850,6 @@ build_package_standard_build() {
if [ "$package_var_name" = "PYTHON" ]; then if [ "$package_var_name" = "PYTHON" ]; then
if can_use_homebrew; then if can_use_homebrew; then
use_homebrew || true
use_custom_tcltk || use_homebrew_tcltk || true use_custom_tcltk || use_homebrew_tcltk || true
use_homebrew_readline || true use_homebrew_readline || true
use_homebrew_ncurses || true use_homebrew_ncurses || true
@ -836,9 +858,9 @@ build_package_standard_build() {
else else
use_homebrew_zlib || true use_homebrew_zlib || true
fi fi
use_homebrew || true
fi fi
if can_use_macports; then if can_use_macports; then
use_macports || true
use_custom_tcltk || true use_custom_tcltk || true
use_macports_readline || true use_macports_readline || true
use_macports_ncurses || true use_macports_ncurses || true
@ -847,6 +869,7 @@ build_package_standard_build() {
else else
use_macports_zlib || true use_macports_zlib || true
fi fi
use_macports || true
fi fi
use_freebsd_pkg || true use_freebsd_pkg || true
@ -1452,7 +1475,7 @@ prepend_ldflags_libs() {
} }
use_homebrew() { use_homebrew() {
can_use_homebrew || return 1 locked_in homebrew || return 1
# unless Homebrew is at the default /usr/local, need to add its paths to # unless Homebrew is at the default /usr/local, need to add its paths to
# compiler search to be able to use non-keg-only deps from there # compiler search to be able to use non-keg-only deps from there
if command -v brew &>/dev/null; then if command -v brew &>/dev/null; then
@ -1466,7 +1489,7 @@ use_homebrew() {
} }
use_macports() { use_macports() {
can_use_macports || return 1 locked_in macports || return 1
local port_location="$(command -v port)" local port_location="$(command -v port)"
if [ -n "$port_location" ]; then if [ -n "$port_location" ]; then
local prefix="${port_location%/bin/port}" local prefix="${port_location%/bin/port}"
@ -1492,6 +1515,7 @@ use_homebrew_yaml() {
echo "python-build: use libyaml from homebrew" echo "python-build: use libyaml from homebrew"
export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}"
export LDFLAGS="-L$libdir/lib${LDFLAGS:+ ${LDFLAGS% }}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ ${LDFLAGS% }}"
lock_in homebrew
else else
return 1 return 1
fi fi
@ -1506,6 +1530,7 @@ use_macports_yaml() {
echo "python-build: use libyaml from MacPorts" echo "python-build: use libyaml from MacPorts"
export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}"
export LDFLAGS="-L$libdir/lib${LDFLAGS:+ ${LDFLAGS% }}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ ${LDFLAGS% }}"
lock_in macports
fi fi
else else
return 1 return 1
@ -1563,6 +1588,7 @@ use_homebrew_readline() {
echo "python-build: use readline from homebrew" echo "python-build: use readline from homebrew"
export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}"
export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}"
lock_in homebrew
else else
return 1 return 1
fi fi
@ -1579,6 +1605,7 @@ use_macports_readline() {
echo "python-build: use readline from MacPorts" echo "python-build: use readline from MacPorts"
export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}"
export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}"
lock_in macports
fi fi
else else
return 1 return 1
@ -1593,6 +1620,7 @@ use_homebrew_ncurses() {
echo "python-build: use ncurses from homebrew" echo "python-build: use ncurses from homebrew"
export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}"
export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}"
lock_in homebrew
else else
return 1 return 1
fi fi
@ -1607,6 +1635,7 @@ use_macports_ncurses() {
echo "python-build: use ncurses from MacPorts" echo "python-build: use ncurses from MacPorts"
export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}" export CPPFLAGS="-I$libdir/include${CPPFLAGS:+ $CPPFLAGS}"
export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}" export LDFLAGS="-L$libdir/lib${LDFLAGS:+ $LDFLAGS}"
lock_in macports
fi fi
else else
return 1 return 1
@ -1668,7 +1697,8 @@ use_homebrew_openssl() {
export LDFLAGS="-L$ssldir/lib${LDFLAGS:+ $LDFLAGS}" export LDFLAGS="-L$ssldir/lib${LDFLAGS:+ $LDFLAGS}"
fi fi
export PKG_CONFIG_PATH="$ssldir/lib/pkgconfig/:${PKG_CONFIG_PATH}" export PKG_CONFIG_PATH="$ssldir/lib/pkgconfig/:${PKG_CONFIG_PATH}"
return lock_in homebrew
return 0
fi fi
done done
return 1 return 1
@ -1693,7 +1723,8 @@ use_macports_openssl() {
fi fi
fi fi
export PKG_CONFIG_PATH="$ssldir/lib/pkgconfig/:${PKG_CONFIG_PATH}" export PKG_CONFIG_PATH="$ssldir/lib/pkgconfig/:${PKG_CONFIG_PATH}"
return lock_in macports
return 0
fi fi
done done
return 1 return 1
@ -1793,6 +1824,7 @@ use_homebrew_zlib() {
if [ -d "$brew_zlib" ]; then if [ -d "$brew_zlib" ]; then
echo "python-build: use zlib from homebrew" echo "python-build: use zlib from homebrew"
export CFLAGS="-I${brew_zlib} ${CFLAGS}" export CFLAGS="-I${brew_zlib} ${CFLAGS}"
lock_in homebrew
fi fi
} }
@ -1821,6 +1853,7 @@ use_macports_zlib() {
echo "python-build: use zlib from MacPorts" echo "python-build: use zlib from MacPorts"
export CPPFLAGS="-I$prefix/include ${CPPFLAGS}" export CPPFLAGS="-I$prefix/include ${CPPFLAGS}"
export LDFLAGS="-L$prefix/lib ${LDFLAGS}" export LDFLAGS="-L$prefix/lib ${LDFLAGS}"
lock_in macports
fi fi
else else
return 1 return 1
@ -1851,6 +1884,7 @@ use_homebrew_tcltk() {
fi fi
fi fi
export PKG_CONFIG_PATH="${tcltk_libdir}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}" export PKG_CONFIG_PATH="${tcltk_libdir}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
lock_in homebrew
return 0 return 0
fi fi
done done