Add envvar to skip Homebrew

This commit is contained in:
Sam Doran 2022-09-13 16:25:15 +03:00 committed by Ivan Pozdeev
parent cfe684ef42
commit e6446555f3
3 changed files with 43 additions and 11 deletions

View file

@ -113,6 +113,7 @@ You can set certain environment variables to control the build process.
checksum of the file to the mirror URL. checksum of the file to the mirror URL.
* `PYTHON_BUILD_SKIP_MIRROR`, if set, forces python-build to download packages from * `PYTHON_BUILD_SKIP_MIRROR`, if set, forces python-build to download packages from
their original source URLs instead of using a mirror. their original source URLs instead of using a mirror.
* `PYTHON_BUILD_SKIP_HOMEBREW`, if set, will not search for libraries installed by Homebrew on macOS.
* `PYTHON_BUILD_ROOT` overrides the default location from where build definitions * `PYTHON_BUILD_ROOT` overrides the default location from where build definitions
in `share/python-build/` are looked up. in `share/python-build/` are looked up.
* `PYTHON_BUILD_DEFINITIONS` can be a list of colon-separated paths that get * `PYTHON_BUILD_DEFINITIONS` can be a list of colon-separated paths that get
@ -231,7 +232,7 @@ the full build log for build failures.
### Testing new python versions ### Testing new python versions
If you are contributing a new python version for python-build, If you are contributing a new python version for python-build,
you can test the build in a [docker](https://www.docker.com/) container based on Ubuntu 18.04. you can test the build in a [docker](https://www.docker.com/) container based on Ubuntu 18.04.
With docker installed: With docker installed:
@ -249,7 +250,7 @@ docker run -it my_container
``` ```
The container will need to be rebuilt whenever you change the repo, The container will need to be rebuilt whenever you change the repo,
but after the first build, this will be very fast, but after the first build, this will be very fast,
as the layer including the build dependencies will be cached. as the layer including the build dependencies will be cached.
Changes made inside the container will not be persisted. Changes made inside the container will not be persisted.

View file

@ -112,6 +112,11 @@ is_mac() {
[ $# -eq 0 ] || [ "$(osx_version)" "$@" ] [ $# -eq 0 ] || [ "$(osx_version)" "$@" ]
} }
can_use_homebrew() {
[ -z "$PYTHON_BUILD_SKIP_HOMEBREW" ] || return 1
is_mac || return 1
}
# 9.1 -> 901 # 9.1 -> 901
# 10.9 -> 1009 # 10.9 -> 1009
# 10.10 -> 1010 # 10.10 -> 1010
@ -1322,7 +1327,7 @@ configured_with_package_dir() {
} }
use_homebrew() { use_homebrew() {
is_mac || return 1 can_use_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 is_mac && command -v brew &>/dev/null; then if is_mac && command -v brew &>/dev/null; then
@ -1344,7 +1349,7 @@ needs_yaml() {
} }
use_homebrew_yaml() { use_homebrew_yaml() {
is_mac || return 1 can_use_homebrew || return 1
local libdir="$(brew --prefix libyaml 2>/dev/null || true)" local libdir="$(brew --prefix libyaml 2>/dev/null || true)"
if [ -d "$libdir" ]; then if [ -d "$libdir" ]; then
echo "python-build: use libyaml from homebrew" echo "python-build: use libyaml from homebrew"
@ -1388,7 +1393,7 @@ has_broken_mac_readline() {
} }
use_homebrew_readline() { use_homebrew_readline() {
is_mac || return 1 can_use_homebrew || return 1
if ! configured_with_package_dir "python" "readline/rlconf.h"; then if ! configured_with_package_dir "python" "readline/rlconf.h"; then
local libdir="$(brew --prefix readline 2>/dev/null || true)" local libdir="$(brew --prefix readline 2>/dev/null || true)"
if [ -d "$libdir" ]; then if [ -d "$libdir" ]; then
@ -1429,7 +1434,7 @@ has_broken_mac_openssl() {
} }
use_homebrew_openssl() { use_homebrew_openssl() {
is_mac || return 1 can_use_homebrew || return 1
command -v brew >/dev/null || return 1 command -v brew >/dev/null || return 1
for openssl in ${PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA:-openssl}; do for openssl in ${PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA:-openssl}; do
local ssldir="$(brew --prefix "${openssl}" || true)" local ssldir="$(brew --prefix "${openssl}" || true)"
@ -1529,7 +1534,7 @@ build_package_verify_openssl() {
} }
use_homebrew_zlib() { use_homebrew_zlib() {
is_mac || return 1 can_use_homebrew || return 1
local brew_zlib="$(brew --prefix zlib 2>/dev/null || true)" local brew_zlib="$(brew --prefix zlib 2>/dev/null || true)"
if [ -d "$brew_zlib" ]; then if [ -d "$brew_zlib" ]; then
echo "python-build: use zlib from homebrew" echo "python-build: use zlib from homebrew"
@ -1549,7 +1554,7 @@ use_xcode_sdk_zlib() {
} }
use_homebrew_tcltk() { use_homebrew_tcltk() {
is_mac || return 1 can_use_homebrew || return 1
# get the version from the folder that homebrew versions # get the version from the folder that homebrew versions
local tcltk_libdir="$(brew --prefix tcl-tk 2>/dev/null || true)" local tcltk_libdir="$(brew --prefix tcl-tk 2>/dev/null || true)"
if [ -d "$tcltk_libdir" ]; then if [ -d "$tcltk_libdir" ]; then
@ -1591,13 +1596,13 @@ use_custom_tcltk() {
get_tcltk_flag_from() { get_tcltk_flag_from() {
IFS=$'\n' IFS=$'\n'
# parse input string into array # parse input string into array
local opts_arr=( $(xargs -n1 <<<"$1") ) local opts_arr=( $(xargs -n1 <<<"$1") )
# iterate through `opts_arr`, break if `--with-tcltk-libs=` was found. # iterate through `opts_arr`, break if `--with-tcltk-libs=` was found.
for opts in ${opts_arr[@]}; do for opts in ${opts_arr[@]}; do
# `--with-tcltk-libs=` must be the prefix. # `--with-tcltk-libs=` must be the prefix.
if [[ "$opts" == "--with-tcltk-libs="* ]]; then if [[ "$opts" == "--with-tcltk-libs="* ]]; then
# return # return
echo "$opts" echo "$opts"
break break
fi fi
@ -1607,7 +1612,7 @@ get_tcltk_flag_from() {
} }
use_tcltk() { use_tcltk() {
if is_mac; then if can_use_homebrew; then
local tcltk_libdir="$(brew --prefix tcl-tk 2>/dev/null || true)" local tcltk_libdir="$(brew --prefix tcl-tk 2>/dev/null || true)"
fi fi
local tcl_tk_libs="$(get_tcltk_flag_from "$PYTHON_CONFIGURE_OPTS")" local tcl_tk_libs="$(get_tcltk_flag_from "$PYTHON_CONFIGURE_OPTS")"

View file

@ -283,6 +283,32 @@ make install
OUT OUT
} }
@test "no library searches performed during normal operation touch homebrew if envvar is set" {
cached_tarball "Python-3.6.2"
for i in {1..4}; do stub uname '-s : echo Darwin'; done
for i in {1..2}; do stub sw_vers '-productVersion : echo 1010'; done
stub brew true; brew
stub_make_install
export PYTHON_BUILD_SKIP_HOMEBREW=1
run_inline_definition <<DEF
install_package "Python-3.6.2" "http://python.org/ftp/python/3.6.2/Python-3.6.2.tar.gz"
DEF
assert_success
unstub uname
unstub brew
unstub make
assert_build_log <<OUT
Python-3.6.2: CPPFLAGS="-I${TMP}/install/include " LDFLAGS="-L${TMP}/install/lib "
Python-3.6.2: --prefix=$INSTALL_ROOT --libdir=$INSTALL_ROOT/lib
make -j 2
make install
OUT
}
@test "readline is not linked from Homebrew when explicitly defined" { @test "readline is not linked from Homebrew when explicitly defined" {
cached_tarball "Python-3.6.2" cached_tarball "Python-3.6.2"