diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build index 5ae819cb..4531f1dc 100755 --- a/plugins/python-build/bin/python-build +++ b/plugins/python-build/bin/python-build @@ -779,6 +779,7 @@ build_package_standard_build() { else use_homebrew_zlib || true fi + use_dsymutil || true fi ( if [ "${CFLAGS+defined}" ] || [ "${!PACKAGE_CFLAGS+defined}" ]; then @@ -1626,6 +1627,16 @@ use_tcltk() { fi } +# Since 3.12, CPython can add DWARF debug information in MacOS +# using Apple's nonstandard way, `dsymutil', that creates a "dSYM bundle" +# that's supposed to be installed alongside executables +# (https://github.com/python/cpython/issues/95973). +use_dsymutil() { + if [[ -n "$PYTHON_BUILD_CONFIGURE_WITH_DSYMUTIL" ]] && is_mac; then + package_option python configure --with-dsymutil + fi +} + build_package_enable_shared() { package_option python configure --enable-shared } diff --git a/plugins/python-build/share/python-build/3.12-dev b/plugins/python-build/share/python-build/3.12-dev index 08396a67..8fa3a02e 100644 --- a/plugins/python-build/share/python-build/3.12-dev +++ b/plugins/python-build/share/python-build/3.12-dev @@ -1,5 +1,6 @@ prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 +export PYTHON_BUILD_CONFIGURE_WITH_DSYMUTIL=1 install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline install_git "Python-3.12-dev" "https://github.com/python/cpython" main standard verify_py312 copy_python_gdb ensurepip diff --git a/plugins/python-build/test/build.bats b/plugins/python-build/test/build.bats index e770a690..f761c8f1 100644 --- a/plugins/python-build/test/build.bats +++ b/plugins/python-build/test/build.bats @@ -515,14 +515,41 @@ make install DOGE="such wow" OUT } -@test "setting MAKE_INSTALL_OPTS to a multi-word string" { +@test "configuring with dSYM in MacOS" { cached_tarball "Python-3.6.2" - for i in {1..8}; do stub uname '-s : echo Linux'; done + for i in {1..9}; do stub uname '-s : echo Darwin'; done + for i in {1..2}; do stub sw_vers '-productVersion : echo 1010'; done + for i in {1..4}; do stub brew false; done stub_make_install - export MAKE_INSTALL_OPTS="DOGE=\"such wow\"" run_inline_definition <