mirror of
https://github.com/pyenv/pyenv.git
synced 2025-12-06 18:08:37 +00:00
Compare commits
2 Commits
f434db24cd
...
c26bc24557
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c26bc24557 | ||
|
|
260a51a598 |
@ -144,10 +144,19 @@ MacPorts Homebrew is used to find dependency packages if `port` is found on `PAT
|
||||
|
||||
Set `PYTHON_BUILD_USE_MACPORTS` or `PYTHON_BUILD_SKIP_MACPORTS` to override this default.
|
||||
|
||||
###### Interaction with Homebrew
|
||||
##### Pixi
|
||||
|
||||
If both Homebrew and MacPorts are installed and allowed to be used, Homebrew takes preference.
|
||||
There first ecosystem where any of the required dependency packages is found is used.
|
||||
Pixi is used to find dependency packages if `pixi` is found on `PATH` in both MacOS and Linux.
|
||||
|
||||
Set `PYTHON_BUILD_USE_PIXI` or `PYTHON_BUILD_SKIP_PIXI` to override this default.
|
||||
|
||||
By default, python-build looks for dependencies in a Pixi global environment named `python-deps`.
|
||||
You can override this by setting `PYTHON_BUILD_PIXI_ENV` to a different environment name.
|
||||
|
||||
##### Interaction between Homebrew, MacPorts and pixi
|
||||
|
||||
If more than once package ecosystems are installed, Homebrew takes preference, then MacPorts, then pixi.
|
||||
The first ecosystem where any of the required dependency packages is found is used.
|
||||
|
||||
##### Portage
|
||||
|
||||
@ -178,6 +187,9 @@ You can set certain environment variables to control the build process.
|
||||
* `PYTHON_BUILD_TCLTK_FORMULA`, override the Homebrew Tcl/Tk formula to use.
|
||||
* `PYTHON_BUILD_SKIP_MACPORTS`, if set, will not search for libraries installed by MacPorts when it would normally will.
|
||||
* `PYTHON_BUILD_USE_MACPORTS`, if set, will search for libraries installed by MacPorts when it would normally not.
|
||||
* `PYTHON_BUILD_SKIP_PIXI`, if set, will not search for libraries installed by pixi when it would normally will.
|
||||
* `PYTHON_BUILD_USE_PIXI`, if set, will search for libraries installed by pixi when it would normally not.
|
||||
* `PYTHON_BUILD_PIXI_ENV`, override the Pixi global environment to use (defaults to `python-deps`).
|
||||
* `PYTHON_BUILD_ROOT` overrides the default location from where build definitions
|
||||
in `share/python-build/` are looked up.
|
||||
* `PYTHON_BUILD_DEFINITIONS` can be a list of colon-separated paths that get
|
||||
|
||||
@ -2032,6 +2032,35 @@ use_pixi_zlib() {
|
||||
fi
|
||||
}
|
||||
|
||||
configure_tcltk_flags() {
|
||||
local prefix="$1"
|
||||
|
||||
# In Homebrew Tcl/Tk 8.6.13, headers have been moved to the 'tcl-tk' subdir.
|
||||
local tcltk_includes="$(sh -c 'cd '"$prefix"'/lib; . ./tclConfig.sh; . ./tkConfig.sh; echo "$TCL_INCLUDE_SPEC $TK_INCLUDE_SPEC"')"
|
||||
# Homebrew Tcl/Tk 9 is built with external libtommath. CPython's build as of 3.14.0 does not detect that and fails to link to tommath symbols
|
||||
local tcltk_cflags=""
|
||||
if sh -c '. '"$prefix"'/lib/tclConfig.sh; echo "$TCL_DEFS"' | grep -qwFe '-DTCL_WITH_EXTERNAL_TOMMATH=1'; then
|
||||
tcltk_cflags="-DTCL_WITH_EXTERNAL_TOMMATH=1"
|
||||
fi
|
||||
# For some reason, keg-only tcl-tk@8 successfully links with Tkinter without specifying rpath, with `/opt' rpath
|
||||
# so no need to translate /Cellar path to /opt path
|
||||
local tcltk_libs="$(sh -c 'cd '"$prefix"'/lib; . ./tclConfig.sh; . ./tkConfig.sh; echo "$TCL_LIB_SPEC $TK_LIB_SPEC"')"
|
||||
# Since 2.7.6, 3.3.3, 3.4.0 (Issue #1584): --with-tcltk-includes + --with-tcltk-libs Configure options
|
||||
# Since 3.11.0 (bpo-45847): `pkg-config` call, TCLTK_CFLAGS + TCLTK_LIBS override
|
||||
if [[ -n "$PYTHON_BUILD_TCLTK_USE_PKGCONFIG" ]]; then
|
||||
# pkg-config is not present out of the box in MacOS.
|
||||
# There's no way to provide a fallback only if it's is not present
|
||||
# and Configure's logic of detecting if it's present is complicated.
|
||||
# So we just override it always
|
||||
export TCLTK_CFLAGS="$tcltk_includes${tcltk_cflags:+ $tcltk_cflags}"
|
||||
export TCLTK_LIBS="$tcltk_libs"
|
||||
else
|
||||
package_option python configure --with-tcltk-includes="$tcltk_includes"
|
||||
package_option python configure --with-tcltk-libs="$tcltk_libs"
|
||||
[[ -n $tcltk_cflags ]] && export CFLAGS="${tcltk_cflags}${CFLAGS:+ $CFLAGS}"
|
||||
fi
|
||||
}
|
||||
|
||||
use_homebrew_tcltk() {
|
||||
can_use_homebrew || return 1
|
||||
local tcltk_formula
|
||||
@ -2042,33 +2071,9 @@ use_homebrew_tcltk() {
|
||||
local tcltk_prefix="$(brew --prefix "${tcltk_formula}" 2>/dev/null || true)"
|
||||
if [ -d "$tcltk_prefix" ]; then
|
||||
echo "python-build: use ${tcltk_formula} from homebrew"
|
||||
# In Homebrew Tcl/Tk 8.6.13, headers have been moved to the 'tcl-tk' subdir.
|
||||
local tcltk_includes="$(sh -c 'cd '"$tcltk_prefix"'/lib; . ./tclConfig.sh; . ./tkConfig.sh; echo "$TCL_INCLUDE_SPEC $TK_INCLUDE_SPEC"')"
|
||||
# Homebrew Tcl/Tk 9 is built with external libtommath. CPython's build as of 3.14.0 does not detect that and fails to link to tommath symbols
|
||||
local tcltk_cflags
|
||||
if sh -c '. '"$tcltk_prefix"'/lib/tclConfig.sh; echo "$TCL_DEFS"' | grep -qwFe '-DTCL_WITH_EXTERNAL_TOMMATH=1'; then
|
||||
tcltk_cflags="-DTCL_WITH_EXTERNAL_TOMMATH=1"
|
||||
fi
|
||||
# For some reason, keg-only tcl-tk@8 successfully links with Tkinter without specifying rpath, with `/opt' rpath
|
||||
# so no need to translate /Cellar path to /opt path
|
||||
local tcltk_libs="$(sh -c 'cd '"$tcltk_prefix"'/lib; . ./tclConfig.sh; . ./tkConfig.sh; echo "$TCL_LIB_SPEC $TK_LIB_SPEC"')"
|
||||
# Since 2.7.6, 3.3.3, 3.4.0 (Issue #1584): --with-tcltk-includes + --with-tcltk-libs Configure options
|
||||
# Since 3.11.0 (bpo-45847): `pkg-config` call, TCLTK_CFLAGS + TCLTK_LIBS override
|
||||
if [[ -n "$PYTHON_BUILD_TCLTK_USE_PKGCONFIG" ]]; then
|
||||
# pkg-config is not present out of the box in MacOS.
|
||||
# There's no way to provide a fallback only if it's is not present
|
||||
# and Configure's logic of detecting if it's present is complicated.
|
||||
# So we just override it always
|
||||
export TCLTK_CFLAGS="$tcltk_includes${tcltk_cflags:+ $tcltk_cflags}"
|
||||
export TCLTK_LIBS="$tcltk_libs"
|
||||
else
|
||||
package_option python configure --with-tcltk-includes="$tcltk_includes"
|
||||
package_option python configure --with-tcltk-libs="$tcltk_libs"
|
||||
[[ -n $tcltk_cflags ]] && export CFLAGS="${tcltk_cflags}${CFLAGS:+ $CFLAGS}"
|
||||
fi
|
||||
#set in either case as a failsafe
|
||||
configure_tcltk_flags "$tcltk_prefix"
|
||||
# set PKG_CONFIG_PATH as a failsafe
|
||||
export PKG_CONFIG_PATH="${tcltk_prefix}/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
|
||||
|
||||
lock_in homebrew
|
||||
return 0
|
||||
fi
|
||||
@ -2085,29 +2090,7 @@ use_pixi_tcltk() {
|
||||
if pixi global list --environment "$env_name" 2>/dev/null | grep -q "^tk"; then
|
||||
echo "python-build: use tk from pixi (${env_name})"
|
||||
local prefix="$(pixi_env_prefix)" || return 1
|
||||
# In Homebrew Tcl/Tk 8.6.13, headers have been moved to the 'tcl-tk' subdir.
|
||||
local tcltk_includes="$(sh -c 'cd '"$prefix"'/lib; . ./tclConfig.sh; . ./tkConfig.sh; echo "$TCL_INCLUDE_SPEC $TK_INCLUDE_SPEC"')"
|
||||
# Homebrew Tcl/Tk 9 is built with external libtommath. CPython's build as of 3.14.0 does not detect that and fails to link to tommath symbols
|
||||
local tcltk_cflags
|
||||
if sh -c '. '"$prefix"'/lib/tclConfig.sh; echo "$TCL_DEFS"' | grep -qwFe '-DTCL_WITH_EXTERNAL_TOMMATH=1'; then
|
||||
tcltk_cflags="-DTCL_WITH_EXTERNAL_TOMMATH=1"
|
||||
fi
|
||||
# For some reason, keg-only tcl-tk@8 successfully links with Tkinter without specifying rpath, with `/opt' rpath
|
||||
# so no need to translate /Cellar path to /opt path
|
||||
local tcltk_libs="$(sh -c 'cd '"$prefix"'/lib; . ./tclConfig.sh; . ./tkConfig.sh; echo "$TCL_LIB_SPEC $TK_LIB_SPEC"')"
|
||||
if [[ -n "$PYTHON_BUILD_TCLTK_USE_PKGCONFIG" ]]; then
|
||||
# pkg-config is not present out of the box in MacOS.
|
||||
# There's no way to provide a fallback only if it's is not present
|
||||
# and Configure's logic of detecting if it's present is complicated.
|
||||
# So we just override it always
|
||||
export TCLTK_CFLAGS="$tcltk_includes${tcltk_cflags:+ $tcltk_cflags}"
|
||||
export TCLTK_LIBS="$tcltk_libs"
|
||||
else
|
||||
package_option python configure --with-tcltk-includes="$tcltk_includes"
|
||||
package_option python configure --with-tcltk-libs="$tcltk_libs"
|
||||
[[ -n $tcltk_cflags ]] && export CFLAGS="${tcltk_cflags}${CFLAGS:+ $CFLAGS}"
|
||||
fi
|
||||
|
||||
configure_tcltk_flags "$prefix"
|
||||
lock_in pixi
|
||||
return 0
|
||||
fi
|
||||
|
||||
Loading…
Reference in New Issue
Block a user