From 5d43b9a39df408d51a929c3694fb4fa12aab56a9 Mon Sep 17 00:00:00 2001 From: Mingyang Wu Date: Tue, 15 Sep 2026 07:20:52 +0800 Subject: [PATCH] python-build: honor explicitly configured OpenSSL on macOS (#3541) * python-build: probe OpenSSL from standard dependency discovery Assisted-by: OpenAI Codex Signed-off-by: Mingyang Wu <129849514+aprylewu@users.noreply.github.com> --- plugins/python-build/bin/python-build | 11 ++ plugins/python-build/test/build.bats | 236 ++++++++++++++++++++++++++ 2 files changed, 247 insertions(+) diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build index ed07ff4c..0a802722 100755 --- a/plugins/python-build/bin/python-build +++ b/plugins/python-build/bin/python-build @@ -873,6 +873,7 @@ build_package_standard_build() { if [ "$package_var_name" = "PYTHON" ]; then if can_use_homebrew; then + configured_with_openssl || use_homebrew_openssl || true use_custom_tcltk || use_homebrew_tcltk || true use_homebrew_readline || true use_homebrew_ncurses || true @@ -885,6 +886,7 @@ build_package_standard_build() { fi fi if can_use_macports; then + configured_with_openssl || use_macports_openssl || true use_custom_tcltk || true use_macports_readline || true use_macports_ncurses || true @@ -1705,8 +1707,17 @@ build_package_mac_readline() { build_package_standard "$@" } +configured_with_openssl() { + local arg + for arg in ${CONFIGURE_OPTS} ${PYTHON_CONFIGURE_OPTS} "${PYTHON_CONFIGURE_OPTS_ARRAY[@]}"; do + [[ "$arg" =~ ^--with-openssl(=|$) ]] && return 0 + done + return 1 +} + has_broken_mac_openssl() { is_mac || return 1 + configured_with_openssl && return 1 local openssl_version="$(/usr/bin/openssl version 2>/dev/null || true)" if [[ $openssl_version = "OpenSSL 0.9.8"?* || $openssl_version = "LibreSSL"* ]]; then if can_use_homebrew; then diff --git a/plugins/python-build/test/build.bats b/plugins/python-build/test/build.bats index fe6e1abb..9003f78f 100644 --- a/plugins/python-build/test/build.bats +++ b/plugins/python-build/test/build.bats @@ -219,8 +219,10 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub brew '--prefix openssl : false' for i in {1..5}; do stub brew false; done stub brew "--prefix : echo '$BREW_PREFIX'" + stub port '-q installed openssl3 : false' '-q installed openssl : false' for i in {1..3}; do stub port false; done stub_make_install @@ -253,6 +255,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub brew '--prefix openssl : false' for i in {1..5}; do stub brew false; done stub brew "--prefix : echo '$BREW_PREFIX'" stub_make_install @@ -282,6 +285,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub port '-q installed openssl3 : false' '-q installed openssl : false' for i in {1..3}; do stub port false; done stub_make_install export PYTHON_BUILD_SKIP_HOMEBREW=1 @@ -315,6 +319,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' stub brew "--prefix libyaml : echo '$brew_libdir'" + stub brew '--prefix openssl : false' for i in {1..6}; do stub brew false; done stub_make_install @@ -341,6 +346,7 @@ OUT mkdir -p "$readline_libdir" stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub brew '--prefix openssl : false' for i in {1..2}; do stub brew false; done stub brew "--prefix readline : echo '$readline_libdir'" for i in {1..3}; do stub brew false; done @@ -371,6 +377,7 @@ OUT mkdir -p "$ncurses_libdir" stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub brew '--prefix openssl : false' for i in {1..3}; do stub brew false; done stub brew "--prefix ncurses : echo '$ncurses_libdir'" for i in {1..2}; do stub brew false; done @@ -400,6 +407,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' stub port "-q installed libyaml : echo ' libyaml @0.2.5_0 (active)'" + stub port '-q installed openssl3 : false' '-q installed openssl : false' for i in {1..3}; do stub port false; done stub_make_install export PYTHON_BUILD_SKIP_HOMEBREW=1 @@ -427,6 +435,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub port '-q installed openssl3 : false' '-q installed openssl : false' stub port "-q installed readline : echo ' readline @8.2.013_0 (active)'" for i in {1..2}; do stub port false; done stub_make_install @@ -457,6 +466,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub port '-q installed openssl3 : false' '-q installed openssl : false' stub port false stub port "-q installed ncurses : echo '$ncurses_libdir'" stub port false @@ -634,6 +644,7 @@ OUT stub uname '-s : echo Linux' stub brew false + stub port '-q installed openssl3 : false' '-q installed openssl : false' for i in {1..3}; do stub port false; done PORT_PREFIX="$(which port)" PORT_PREFIX="${PORT_PREFIX%/bin/port}" @@ -664,6 +675,7 @@ OUT mkdir -p "$BREW_PREFIX" stub uname '-s : echo Linux' + stub brew '--prefix openssl : false' for i in {1..5}; do stub brew false; done stub brew "--prefix : echo '$BREW_PREFIX'" stub_make_install @@ -695,6 +707,7 @@ OUT stub uname '-s : echo Linux' stub brew "--prefix : echo '$BREW_PREFIX'" + stub brew '--prefix openssl : false' for i in {1..5}; do stub brew false; done stub brew "--prefix : echo '$BREW_PREFIX'" stub_make_install @@ -743,6 +756,218 @@ make install OUT } +assert_explicit_openssl() { + local configure_opts="$1" + local definition_opts="$2" + cached_tarball "Python-3.6.2" + + local openssl_libdir="$BATS_TEST_TMPDIR/homebrew-openssl" + mkdir -p "$openssl_libdir" + executable "$BATS_TEST_TMPDIR/bin/brew" <> '$BATS_TEST_TMPDIR/openssl-search' + echo '$openssl_libdir' +else + exit 1 +fi +OUT + executable "$BATS_TEST_TMPDIR/bin/port" <> '$BATS_TEST_TMPDIR/openssl-search' + echo 'openssl3 @3.0.0 (active)' +else + exit 1 +fi +OUT + if [ "$manager" = homebrew ]; then + export PYTHON_BUILD_USE_HOMEBREW=1 + export PYTHON_BUILD_SKIP_MACPORTS=1 + else + export PYTHON_BUILD_SKIP_HOMEBREW=1 + export PYTHON_BUILD_USE_MACPORTS=1 + fi + stub uname '-s : echo Darwin' + stub sw_vers '-productVersion : echo 1010' + stub_make_install + + run_inline_definition <