diff --git a/.github/actions/build-python/action.yml b/.github/actions/build-python/action.yml index fa310e81..194c4994 100644 --- a/.github/actions/build-python/action.yml +++ b/.github/actions/build-python/action.yml @@ -9,6 +9,12 @@ inputs: runs: using: composite steps: + - shell: bash + run: | + #envvars + export PYENV_ROOT="$GITHUB_WORKSPACE" + echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV + echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH # The two OSes differ only in this step. - if: runner.os == 'macOS' shell: bash @@ -19,15 +25,7 @@ runs: shell: bash run: | #prerequisites - sudo apt-get update -q; sudo apt install -yq make build-essential libssl-dev zlib1g-dev \ - libbz2-dev libreadline-dev libsqlite3-dev curl \ - libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev - - shell: bash - run: | - #envvars - export PYENV_ROOT="$GITHUB_WORKSPACE" - echo "PYENV_ROOT=$PYENV_ROOT" >> $GITHUB_ENV - echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH + pyenv install-prerequisites - shell: bash run: | #build diff --git a/.github/workflows/modified_scripts_build.yml b/.github/workflows/modified_scripts_build.yml index a3535930..29b30c94 100644 --- a/.github/workflows/modified_scripts_build.yml +++ b/.github/workflows/modified_scripts_build.yml @@ -96,6 +96,7 @@ jobs: - macos-15-intel - macos-26 - macos-26-intel + - xcode-27 exclude: ${{fromJson(needs.discover_modified_scripts.outputs.versions_macos_build_exclude)}} runs-on: ${{ matrix.os }} steps: @@ -164,6 +165,7 @@ jobs: - macos-15-intel - macos-26 - macos-26-intel + - xcode-27 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v7 @@ -220,10 +222,7 @@ jobs: echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH - run: | #prerequisites - sudo apt-get update -q; sudo apt-get install -yq make build-essential \ - libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ - curl llvm libncurses5-dev libncursesw5-dev \ - xz-utils tk-dev libffi-dev liblzma-dev + pyenv install-prerequisites if [[ "${{ matrix.python-version }}" =~ pypy.*-(src|dev) ]]; then export PYENV_BOOTSTRAP_VERSION=pypy2.7-7 echo "PYENV_BOOTSTRAP_VERSION=$PYENV_BOOTSTRAP_VERSION" >> $GITHUB_ENV @@ -283,10 +282,7 @@ jobs: echo "_PYTHON_BUILD_FORCE_SKIP_XZ=1" >> $GITHUB_ENV - run: | #prerequisites - sudo apt-get update -q; sudo apt-get install -yq make build-essential \ - libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \ - curl libncursesw5-dev \ - xz-utils tk-dev libffi-dev liblzma-dev + pyenv install-prerequisites - run: | #build pyenv --debug install ${{ matrix.python-version }} && rc=$? || rc=$? diff --git a/.github/workflows/publish_binary.yml b/.github/workflows/publish_binary.yml new file mode 100644 index 00000000..c3ce5fbb --- /dev/null +++ b/.github/workflows/publish_binary.yml @@ -0,0 +1,70 @@ +name: Publish a binary package + +on: + workflow_dispatch: + inputs: + version: + description: A CPython version accepted by `pyenv install` + required: true + type: string + +permissions: + contents: read + +jobs: + publish_ubuntu: + runs-on: ubuntu-24.04 + env: + PYENV_ROOT: ${{ github.workspace }} + VERSION: ${{ inputs.version }} + steps: + - uses: actions/checkout@v7 + - name: Install build prerequisites + run: ./bin/pyenv install-prerequisites + - name: Build package + env: + PYTHON_CONFIGURE_OPTS: --enable-optimizations + run: | + VERSION="${VERSION%%:*}" + entry="$(./bin/pyenv binary package-name "$VERSION")" + echo "entry=$entry" >> "$GITHUB_ENV" + mkdir dist + cd dist + "$GITHUB_WORKSPACE/bin/pyenv" binary package --verbose \ + "$VERSION:$entry" \ + --archive-base-url https://pyenv.github.io/pythons/binaries + + - name: Generate GitHub token + uses: actions/create-github-app-token@v3 + id: generate-token + with: + app-id: ${{ vars.PYENV_BOT_APP_ID }} + private-key: ${{ secrets.PYENV_BOT_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + repositories: pyenv.github.io + permission-contents: write + permission-pull-requests: write + - uses: actions/checkout@v7 + with: + repository: pyenv/pyenv.github.io + token: ${{ steps.generate-token.outputs.token }} + path: site + - name: Update downloads + run: | + mkdir -p site/pythons/binaries + cp "dist/$entry.tar.xz" "dist/$entry.meta" "dist/$entry" \ + site/pythons/binaries/ + cd site/pythons + ./update.sh + - name: Create Pull Request + uses: peter-evans/create-pull-request@v8 + with: + path: site + branch: auto_add_binary/${{ env.entry }} + title: Add CPython ${{ env.entry }} + commit-message: Add CPython ${{ env.entry }} + body: | + Built from pyenv/pyenv@${{ github.sha }} with profile-guided optimization enabled. + + Part of pyenv/pyenv#2334. + token: ${{ steps.generate-token.outputs.token }} diff --git a/Makefile b/Makefile index 6a8ae7e9..cfbc0ec7 100644 --- a/Makefile +++ b/Makefile @@ -10,11 +10,14 @@ TEST_PYTHON_BUILD_DOCKER_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuf TEST_BINARY_DOCKER_PREFIX = test-binary-docker TEST_BINARY_DOCKER_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_BINARY_DOCKER_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_BINARY_DOCKER_PREFIX))) +TEST_LINK_DOCKER_PREFIX = test-link-docker +TEST_LINK_DOCKER_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_LINK_DOCKER_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_LINK_DOCKER_PREFIX))) + TEST_BATS_IMAGE_PREFIX = test-pyenv-docker-image TEST_BATS_IMAGE_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_BATS_IMAGE_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_BATS_IMAGE_PREFIX))) .PHONY: test-docker -test-docker: $(TEST_UNIT_DOCKER_PREFIX) $(TEST_PYTHON_BUILD_DOCKER_PREFIX) $(TEST_BINARY_DOCKER_PREFIX) +test-docker: $(TEST_UNIT_DOCKER_PREFIX) $(TEST_PYTHON_BUILD_DOCKER_PREFIX) $(TEST_BINARY_DOCKER_PREFIX) $(TEST_LINK_DOCKER_PREFIX) .PHONY: $(TEST_UNIT_DOCKER_PREFIX) $(TEST_UNIT_DOCKER_PREFIX): $(TEST_UNIT_DOCKER_TARGETS) @@ -88,6 +91,29 @@ $(TEST_BINARY_DOCKER_TARGETS): $(TEST_BINARY_DOCKER_PREFIX)-% : $(TEST_BATS_IMAG bats $${CI:+-F "/code/test/libexec/bats-format-tap-suite"} \ $${BATS_TEST_FILTER:+--filter "$${BATS_TEST_FILTER}"} plugins/pyenv-binary/test/$${BATS_FILE_FILTER} +.PHONY: $(TEST_LINK_DOCKER_PREFIX) +$(TEST_LINK_DOCKER_PREFIX): $(TEST_LINK_DOCKER_TARGETS) + +.PHONY: $(TEST_LINK_DOCKER_TARGETS) +$(TEST_LINK_DOCKER_TARGETS): DOCKER_IMAGE = $(TEST_BATS_IMAGE_PREFIX) +$(TEST_LINK_DOCKER_TARGETS): GNU = $(if $(findstring -gnu-,$@),True,False) +$(TEST_LINK_DOCKER_TARGETS): BASH = $(filter $(TEST_BASH_VERSIONS),$(subst -, ,$@)) +$(TEST_LINK_DOCKER_TARGETS): DOCKER_TAG = bash-$(BASH)-gnu-$(GNU) +$(TEST_LINK_DOCKER_TARGETS): INTERACTIVE = $(if $(findstring true,$(CI)),,-ti) +$(TEST_LINK_DOCKER_TARGETS): $(TEST_LINK_DOCKER_PREFIX)-% : $(TEST_BATS_IMAGE_PREFIX)-% + $(info Running test with docker image '$(DOCKER_IMAGE):$(DOCKER_TAG)') + docker run \ + --init \ + -v $(PWD):/code:ro \ + -v /etc/passwd:/etc/passwd:ro \ + -v /etc/group:/etc/group:ro \ + -u "$$(id -u $$(whoami)):$$(id -g $$(whoami))" \ + $${CI+-e CI="$${CI}"} \ + $(INTERACTIVE) \ + $(DOCKER_IMAGE):$(DOCKER_TAG) \ + bats $${CI:+-F "/code/test/libexec/bats-format-tap-suite"} \ + $${BATS_TEST_FILTER:+--filter "$${BATS_TEST_FILTER}"} plugins/pyenv-link/test/$${BATS_FILE_FILTER} + # Build all images needed for bats under docker .PHONY: $(TEST_BATS_IMAGE_PREFIX) $(TEST_BATS_IMAGE_PREFIX): $(TEST_BATS_IMAGE_TARGETS) @@ -110,13 +136,13 @@ $(TEST_BATS_IMAGE_TARGETS): ./ ; \ fi -.PHONY: test test-unit test-python-build test-binary +.PHONY: test test-unit test-python-build test-binary test-link # Do not pass in user flags to build tests. unexport PYTHON_CFLAGS unexport PYTHON_CONFIGURE_OPTS -test: test-unit test-python-build test-binary +test: test-unit test-python-build test-binary test-link test-unit: bats PATH="./bats/bin:$$PATH" test/run @@ -129,6 +155,10 @@ test-binary: bats cd plugins/pyenv-binary && $(PWD)/bats/bin/bats $${CI:+-F "$(PWD)/test/libexec/bats-format-tap-suite"} \ $${BATS_TEST_FILTER:+--filter "$${BATS_TEST_FILTER}"} test/$${BATS_FILE_FILTER} +test-link: bats + cd plugins/pyenv-link && $(PWD)/bats/bin/bats $${CI:+-F "$(PWD)/test/libexec/bats-format-tap-suite"} \ + $${BATS_TEST_FILTER:+--filter "$${BATS_TEST_FILTER}"} test/$${BATS_FILE_FILTER} + .SECONDARY: bats-$(TEST_BATS_VERSION) bats-$(TEST_BATS_VERSION): git clone --depth 1 --branch $(TEST_BATS_VERSION) https://github.com/bats-core/bats-core.git bats-$(TEST_BATS_VERSION) diff --git a/README.md b/README.md index 03dfbbd3..df75c01a 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ This project was forked from [rbenv](https://github.com/rbenv/rbenv) and * Lets you **change the global Python version** on a per-user basis. * Provides support for **per-project Python versions**. +* Supports **multiple Python distributions**: CPython, PyPy, Stackless Python, Jython, and more. + See the [full list of available versions](https://github.com/pyenv/pyenv/tree/master/plugins/python-build/share/python-build). * Allows you to **override the Python version** with an environment variable. * Searches for commands from **multiple versions of Python at a time**. diff --git a/libexec/pyenv-init b/libexec/pyenv-init index b45181fa..34f1173e 100755 --- a/libexec/pyenv-init +++ b/libexec/pyenv-init @@ -473,12 +473,12 @@ function pyenv { } if ( ("${commands[*]}" -split ' ') -contains \$command ) { - \$shell_cmds = (& (get-command -commandtype application pyenv) sh-\$command \$args) + \$shell_cmds = (& (get-command -commandtype application pyenv -totalcount 1) sh-\$command \$args) if ( \$shell_cmds.Count -gt 0 ) { iex (\$shell_cmds -join "\`n") } } else { - & (get-command -commandtype application pyenv) \$command \$args + & (get-command -commandtype application pyenv -totalcount 1) \$command \$args } } EOS diff --git a/plugins/.gitignore b/plugins/.gitignore index 2a5caf55..40bac1a7 100644 --- a/plugins/.gitignore +++ b/plugins/.gitignore @@ -3,4 +3,5 @@ !/version-ext-compat !/python-build !/pyenv-binary +!/pyenv-link /python-build/test/build diff --git a/plugins/pyenv-binary/README.md b/plugins/pyenv-binary/README.md index 817e9a6f..e88537f4 100644 --- a/plugins/pyenv-binary/README.md +++ b/plugins/pyenv-binary/README.md @@ -14,6 +14,9 @@ architecture and a compatible libc) and have the recorded system libraries. It is not portable across, say, glibc and musl, or to an older glibc; the platform and dependency metadata exist to catch that. +Installing a binary package requires `tar` with xz support (typically provided +by the `xz` package). + ## Commands ### `pyenv binary package [-v|--verbose] [:] --archive-base-url ` @@ -29,7 +32,7 @@ Pass `-v` to show build progress from `pyenv install`. ```sh pyenv binary package 3.12.7 \ --archive-base-url https://example.com/binaries -# On Debian 12 x86_64, writes 3.12.7-debian-12-x86_64.tar.gz, +# On Debian 12 x86_64, writes 3.12.7-debian-12-x86_64.tar.xz, # its .meta file and a `3.12.7-debian-12-x86_64' definition. pyenv binary package 3.12.7:company-python \ @@ -54,7 +57,7 @@ pyenv binary package-name 3.12.7 ### `pyenv binary save [] [--name ]` -Packs an installed version into `-.tar.gz` (relative paths) +Packs an installed version into `-.tar.xz` (relative paths) and writes `-.meta` describing the build platform (OS, arch, distro and libc version) and the system libraries the build links against. Use `--name` to set a different base name for both files. @@ -78,7 +81,7 @@ needs are present. ```sh pyenv binary generate-installer ./dist/3.12.7-linux-x86_64.meta \ - --archive-url https://example.com/3.12.7-linux-x86_64.tar.gz \ + --archive-url https://example.com/3.12.7-linux-x86_64.tar.xz \ -o "$(pyenv root)/plugins/python-build/share/python-build/3.12.7-linux-x86_64" pyenv install 3.12.7-linux-x86_64 diff --git a/plugins/pyenv-binary/libexec/pyenv-binary-package b/plugins/pyenv-binary/libexec/pyenv-binary-package index f86666e2..77479f2a 100755 --- a/plugins/pyenv-binary/libexec/pyenv-binary-package +++ b/plugins/pyenv-binary/libexec/pyenv-binary-package @@ -7,7 +7,7 @@ # Installs from source under a separate entry name, saves it as a # binary package, then emits a python-build definition for that package. # The archive, metadata and definition are written to the current directory -# as .tar.gz, .meta and . +# as .tar.xz, .meta and . # # A version `pyenv install' knows how to build. # The optional name to build under and install the @@ -16,7 +16,7 @@ # -v,--verbose Show build progress from `pyenv install'. # --archive-base-url # Where the archive will be hosted; the definition -# downloads it from /.tar.gz. +# downloads it from /.tar.xz. # set -e [ -n "$PYENV_DEBUG" ] && set -x @@ -80,4 +80,4 @@ pyenv-install ${verbose:+--verbose} "$spec" pyenv-binary-save "$entry" "$PWD" --name "$entry" pyenv-binary-generate-installer "${entry}.meta" \ - --archive-url "${archive_base_url%/}/${entry}.tar.gz" -o "$entry" + --archive-url "${archive_base_url%/}/${entry}.tar.xz" -o "$entry" diff --git a/plugins/pyenv-binary/libexec/pyenv-binary-save b/plugins/pyenv-binary/libexec/pyenv-binary-save index b940123a..444c02cc 100755 --- a/plugins/pyenv-binary/libexec/pyenv-binary-save +++ b/plugins/pyenv-binary/libexec/pyenv-binary-save @@ -4,7 +4,7 @@ # # Usage: pyenv binary save [] [--name ] # -# Packs an installed version into a relocatable .tar.gz (relative paths) and +# Packs an installed version into a relocatable .tar.xz (relative paths) and # writes a metadata file listing the build platform and the system libraries # it links against, so an installer can check compatibility before unpacking. # @@ -134,10 +134,10 @@ system_deps() { mkdir -p "$output_dir" package_name="${package_name:-${version}-${platform}}" -archive="${package_name}.tar.gz" +archive="${package_name}.tar.xz" metadata="${package_name}.meta" -tar -C "$(dirname "$prefix")" -czf "${output_dir}/${archive}" "$(basename "$prefix")" +tar -C "$(dirname "$prefix")" -cJf "${output_dir}/${archive}" "$(basename "$prefix")" { echo "# pyenv-binary metadata" diff --git a/plugins/pyenv-binary/test/package.bats b/plugins/pyenv-binary/test/package.bats index 4186a1c8..40e875a9 100644 --- a/plugins/pyenv-binary/test/package.bats +++ b/plugins/pyenv-binary/test/package.bats @@ -66,10 +66,10 @@ pyenv-install --list --bare run pyenv-binary-package 3.12.7 --archive-base-url http://example.com/binaries assert_success assert [ -d "${PYENV_ROOT}/versions/3.12.7-debian-12-x86_64" ] - assert [ -f "${BATS_TEST_TMPDIR}/3.12.7-debian-12-x86_64.tar.gz" ] + assert [ -f "${BATS_TEST_TMPDIR}/3.12.7-debian-12-x86_64.tar.xz" ] assert [ -f "${BATS_TEST_TMPDIR}/3.12.7-debian-12-x86_64.meta" ] run grep '^ARCHIVE_URL=' "${BATS_TEST_TMPDIR}/3.12.7-debian-12-x86_64" - assert_success "ARCHIVE_URL=http://example.com/binaries/3.12.7-debian-12-x86_64.tar.gz" + assert_success "ARCHIVE_URL=http://example.com/binaries/3.12.7-debian-12-x86_64.tar.xz" } @test "rejects an entry name containing a slash" { @@ -102,10 +102,10 @@ generate-installer" --archive-base-url http://example.com/binaries assert_success assert [ -d "${PYENV_ROOT}/versions/3.12.7-test" ] - assert [ -f "${BATS_TEST_TMPDIR}/3.12.7-test.tar.gz" ] + assert [ -f "${BATS_TEST_TMPDIR}/3.12.7-test.tar.xz" ] assert [ -f "${BATS_TEST_TMPDIR}/3.12.7-test.meta" ] run grep '^ARCHIVE_URL=' "${BATS_TEST_TMPDIR}/3.12.7-test" - assert_success "ARCHIVE_URL=http://example.com/binaries/3.12.7-test.tar.gz" + assert_success "ARCHIVE_URL=http://example.com/binaries/3.12.7-test.tar.xz" } @test "correctly joins archive base url with a trailing slash" { @@ -127,5 +127,5 @@ done run pyenv-binary-package 3.12.7:3.12.7-test \ --archive-base-url http://example.com/binaries/ assert_success - assert_line "pyenv-binary-generate-installer --archive-url http://example.com/binaries/3.12.7-test.tar.gz" + assert_line "pyenv-binary-generate-installer --archive-url http://example.com/binaries/3.12.7-test.tar.xz" } diff --git a/plugins/pyenv-binary/test/save.bats b/plugins/pyenv-binary/test/save.bats index 11afe55e..62e0fe83 100644 --- a/plugins/pyenv-binary/test/save.bats +++ b/plugins/pyenv-binary/test/save.bats @@ -33,13 +33,13 @@ platform() { @test "packages an installed version" { create_version "3.12.7" local out="${BATS_TEST_TMPDIR}/dist" - local archive="${out}/3.12.7-$(platform).tar.gz" + local archive="${out}/3.12.7-$(platform).tar.xz" run pyenv-binary-save "3.12.7" "$out" - assert_success "Saved 3.12.7-$(platform).tar.gz and 3.12.7-$(platform).meta to $out" + assert_success "Saved 3.12.7-$(platform).tar.xz and 3.12.7-$(platform).meta to $out" assert [ -f "$archive" ] assert [ -f "${out}/3.12.7-$(platform).meta" ] - run tar -tzf "$archive" + run tar -tJf "$archive" assert_success assert_line 0 "3.12.7/" } @@ -49,10 +49,10 @@ platform() { local out="${BATS_TEST_TMPDIR}/dist" run pyenv-binary-save "3.12.7" "$out" --name "custom" - assert_success "Saved custom.tar.gz and custom.meta to $out" - assert [ -f "${out}/custom.tar.gz" ] + assert_success "Saved custom.tar.xz and custom.meta to $out" + assert [ -f "${out}/custom.tar.xz" ] run grep '^archive=' "${out}/custom.meta" - assert_success "archive=custom.tar.gz" + assert_success "archive=custom.tar.xz" } @test "fails when --name has no value" { @@ -76,7 +76,7 @@ platform() { assert_success assert_line "version=3.12.7" assert_line "platform=$(platform)" - assert_line "archive=3.12.7-$(platform).tar.gz" + assert_line "archive=3.12.7-$(platform).tar.xz" } @test "records the original installation prefix" { @@ -94,7 +94,7 @@ platform() { PATH="$(path_without readelf)" run pyenv-binary-save "3.12.7" "${BATS_TEST_TMPDIR}/dist" assert_failure "pyenv-binary: need readelf to inspect shared libraries" - assert [ ! -e "${BATS_TEST_TMPDIR}/dist/3.12.7-$(platform).tar.gz" ] + assert [ ! -e "${BATS_TEST_TMPDIR}/dist/3.12.7-$(platform).tar.xz" ] } @test "records only direct libraries resolved outside the prefix" { diff --git a/plugins/pyenv-link/LICENSE b/plugins/pyenv-link/LICENSE new file mode 100644 index 00000000..b32e7f6d --- /dev/null +++ b/plugins/pyenv-link/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 yfprojects + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/pyenv-link/README.md b/plugins/pyenv-link/README.md new file mode 100644 index 00000000..9e4cd294 --- /dev/null +++ b/plugins/pyenv-link/README.md @@ -0,0 +1,33 @@ +# pyenv-link +A [pyenv](https://github.com/pyenv/pyenv) plugin for linking Python installations and virtual environments into your pyenv root. + +This plugin recommends the [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv/) plugin. + +## Usage + +Make an arbitrary virtualenv available through pyenv. This automatically guesses a fitting name from the prompt, the directory name or the location of the venv. + +```console +$ pyenv link version .venv +Linked new version named myproject +``` + +You can also specify a name to use for the venv. + +```console +$ pyenv link version .venv myname +Linked new version named myname +``` + +The same command can give a platform-specific binary installation a shorter name: + +```console +$ pyenv link version "$(pyenv root)/versions/3.13.14-linux-x86_64" 3.13.14 +Linked new version named 3.13.14 +``` + +Now you can make pyenv activate/use the venv automatically: + +```console +$ pyenv local myproject +``` diff --git a/plugins/pyenv-link/bin/pyenv-link b/plugins/pyenv-link/bin/pyenv-link new file mode 100755 index 00000000..85b008e3 --- /dev/null +++ b/plugins/pyenv-link/bin/pyenv-link @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# +# Summary: Link a Python environment as a pyenv version +# +# Usage: pyenv link version [--dry] [--quiet] [] +# +# Link a virtual python environment to pyenvs version directory +# so that the venv can be used like one created with *pyenv-virtualenv*. +# +# should be a path to a Python installation or virtual environment. + +set -e +[ -n "$PYENV_DEBUG" ] && set -x + +# Provide pyenv completions +case "$1" in +--complete) + if [ -z "$2" ]; then + echo version + else + shift 2 + pyenv-link-version --complete "$@" + fi + ;; +version) + shift + pyenv-link-version "$@" + exit $? + ;; +*) + pyenv-help --usage link >&2 + exit 1 + ;; +esac diff --git a/plugins/pyenv-link/bin/pyenv-link-version b/plugins/pyenv-link/bin/pyenv-link-version new file mode 100755 index 00000000..7df1d16e --- /dev/null +++ b/plugins/pyenv-link/bin/pyenv-link-version @@ -0,0 +1,150 @@ +#!/usr/bin/env bash +# +# Summary: Link a Python environment as a pyenv version +# +# Usage: pyenv link version [--dry] [--quiet] [] +# +# Link a virtual python environment to pyenvs version directory +# so that the venv can be used like one created with *pyenv-virtualenv*. +# +# should be a path to a Python installation or virtual environment. +# should be string used as a version name it may not be present +# in the pyenv version directory yet. +# If not specified a matching name is guessed from pyvenv.cfg +# or directory name of the venv. +set -e +[ -n "$PYENV_DEBUG" ] && set -x + +# functions + +if ! { + enable -f "${BASH_SOURCE%/*}"/../../../libexec/pyenv-realpath.dylib realpath || + type realpath # realpath available? +} >/dev/null 2>&1; then + # realpath requires GNU coreutils to be installed. That's why its bundled with pyenv + echo realpath not available >&2 + + # work-around when realpath is unavailable + realpath() { + (cd "$1" && pwd) + } +fi + +guess_name() { + local venv_dir=$1 + local name + + # guess venv name from pyvenv.cfg + local pyvenv_cfg_path=$venv_dir/pyvenv.cfg + if [ -f "$pyvenv_cfg_path" ]; then + # if `prompt` key wasn't found the var remains empty + name=$(cut -b 1-1024 "$pyvenv_cfg_path" | sed -n '/^ *prompt *= */s///p') + case "$name" in + \"*\" | \'*\') + name=${name:1:${#name}-2} + ;; + esac + fi + + # guess venv name from name of venv directory + local venv_dir_name=${venv_dir##*/} + if [ -z "$name" ]; then + case "$venv_dir_name" in + venv | env | .venv | .env | ENV | VENV) ;; + *) name=$venv_dir_name ;; + esac + fi + + # guess venv name from name of the parent directory of the venv directory + local venv_dir_parent=${venv_dir%/*} + local venv_dir_parent_name=${venv_dir_parent##*/} + if [ -z "$name" ]; then + name=$venv_dir_parent_name + fi + + echo "$name" +} + +# process args +POSARGS=() +# Provide pyenv completions +if [ "$1" = "--complete" ]; then + echo --dry + echo --quiet + exit +fi + +for arg in "$@"; do + case $arg in + --dry) + dry=true # any value + ;; + --quiet) + quiet=true # any value + ;; + -*) + pyenv-help --usage link-version >&2 + exit 1 + ;; + *) + POSARGS+=("$arg") + ;; + esac +done + +if [ ! ${#POSARGS[@]} -le 2 ] || [ ! ${#POSARGS[@]} -ge 1 ]; then + pyenv-help --usage link-version >&2 + exit 1 +fi + +venv_dir=${POSARGS[0]%/} +venv_name=${POSARGS[1]} + +# Check venv exists +if [ ! -d "$venv_dir" ]; then + echo "The virtual env you specified doesn't exist" + exit 2 +fi + +# make venv dir absolute +venv_dir=$(realpath "$venv_dir") + +# determine venv name +if [ -z "$venv_name" ]; then + venv_name=$(guess_name "$venv_dir") +fi + +case "$venv_name" in +"" | */* | . | .. | *:* | system | *[[:cntrl:]]* ) + echo "pyenv-link: invalid version name \`${venv_name}'" >&2 + exit 1 + ;; +esac + +versions_dir="$PYENV_ROOT/versions" +pyenv_prefix_path="$versions_dir/$venv_name" + +if [ -e "$pyenv_prefix_path" ] || [ -L "$pyenv_prefix_path" ]; then + echo Version "$venv_name" already exists >&2 + exit 3 +fi + +case "$venv_dir" in +"$versions_dir"/*) + link_target=${venv_dir#"$versions_dir"/} + ;; +*) + link_target=$venv_dir + ;; +esac + +# link to pyenv version directory +if [ -z "$dry" ]; then + mkdir -p "$versions_dir" + ln -s "$link_target" "$pyenv_prefix_path" +fi + +# output +if [ -z "$quiet" ]; then + echo "Linked new version named $venv_name" +fi diff --git a/plugins/pyenv-link/test/link.bats b/plugins/pyenv-link/test/link.bats new file mode 100644 index 00000000..0612943d --- /dev/null +++ b/plugins/pyenv-link/test/link.bats @@ -0,0 +1,61 @@ +#!/usr/bin/env bats + +load test_helper + +@test "link completions use the dispatcher" { + run pyenv completions link + assert_success + assert_output < []" +} + +@test "links an installed binary under its plain version name" { + create_alt_executable_in_version "3.13.14-linux-x86_64" python 'echo linked-python' + run pyenv-link version "$PYENV_ROOT/versions/3.13.14-linux-x86_64" 3.13.14 + assert_success "Linked new version named 3.13.14" + assert_equal "3.13.14-linux-x86_64" "$(readlink "$PYENV_ROOT/versions/3.13.14")" + PYENV_VERSION=3.13.14 run pyenv exec python + assert_success "linked-python" +} + +@test "links external paths containing spaces into a fresh root" { + mkdir -p "$PYENV_TEST_DIR/external env/bin" + run pyenv-link version "$PYENV_TEST_DIR/external env" custom + assert_success "Linked new version named custom" + assert_equal "$PYENV_TEST_DIR/external env" "$(readlink "$PYENV_ROOT/versions/custom")" +} + +@test "refuses a dangling destination link" { + mkdir -p "$PYENV_ROOT/versions" "$PYENV_TEST_DIR/source" + ln -s missing "$PYENV_ROOT/versions/dangling" + run pyenv-link version "$PYENV_TEST_DIR/source" dangling + assert_failure "Version dangling already exists" + assert_equal missing "$(readlink "$PYENV_ROOT/versions/dangling")" +} + +@test "rejects invalid version names" { + mkdir -p "$PYENV_TEST_DIR/source" + for name in ../outside . .. 'foo/bar' 'foo:bar' system; do + run pyenv-link version "$PYENV_TEST_DIR/source" "$name" + assert_failure "pyenv-link: invalid version name \`$name'" + assert [ ! -e "$PYENV_ROOT/outside" ] + done + echo "prompt = '../outside'" > "$PYENV_TEST_DIR/source/pyvenv.cfg" + run pyenv-link version "$PYENV_TEST_DIR/source" + assert_failure "pyenv-link: invalid version name \`../outside'" + assert [ ! -e "$PYENV_ROOT/outside" ] +} diff --git a/plugins/pyenv-link/test/test_helper.bash b/plugins/pyenv-link/test/test_helper.bash new file mode 120000 index 00000000..f6bb7c46 --- /dev/null +++ b/plugins/pyenv-link/test/test_helper.bash @@ -0,0 +1 @@ +../../../test/test_helper.bash \ No newline at end of file diff --git a/plugins/python-build/README.md b/plugins/python-build/README.md index 3c95d793..e0a333b3 100644 --- a/plugins/python-build/README.md +++ b/plugins/python-build/README.md @@ -54,8 +54,11 @@ Or, if you would like to install the latest development release: ## Usage -Before you begin, you should ensure that your build environment has the proper -system dependencies for compiling the wanted Python Version (see our [recommendations](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)). +On Ubuntu, Debian, and Mint, install the recommended build dependencies with: + + pyenv install-prerequisites + +For other environments, see our [build environment recommendations](https://github.com/pyenv/pyenv/wiki#suggested-build-environment). ### Using `pyenv install` with pyenv @@ -361,4 +364,3 @@ git diff --name-only master \ - Filter out any which don't live where python-build keeps its build scripts - Look only at the file name (i.e. the python version name) - Run a new docker container for each, building that version - diff --git a/plugins/python-build/bin/pyenv-install-prerequisites b/plugins/python-build/bin/pyenv-install-prerequisites new file mode 100755 index 00000000..c56bbd98 --- /dev/null +++ b/plugins/python-build/bin/pyenv-install-prerequisites @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# +# Summary: Install Python build prerequisites on Debian-based systems +# +# Usage: pyenv install-prerequisites +# +set -e +[ -n "$PYENV_DEBUG" ] && set -x + +# Provide pyenv completions +if [ "$1" = "--complete" ]; then + exit +fi + +usage() { + pyenv-help install-prerequisites 2>/dev/null + [ -z "$1" ] || exit "$1" +} + +if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + usage 0 +fi + +[ "$#" -eq 0 ] || usage 1 >&2 + +if ! command -v apt-get >/dev/null; then + echo "pyenv: installing build prerequisites is not supported on this system" >&2 + exit 1 +fi + +prerequisites=( + make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev + libsqlite3-dev curl git llvm libncurses5-dev libncursesw5-dev xz-utils + tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libzstd-dev +) + +if [ "$(id -u)" -eq 0 ]; then + apt_get=(apt-get) +elif command -v sudo >/dev/null; then + apt_get=(sudo apt-get) +else + echo "pyenv: sudo is required to install build prerequisites" >&2 + exit 1 +fi + +"${apt_get[@]}" update -q +"${apt_get[@]}" install -yq "${prerequisites[@]}" 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/share/python-build/3.13.11t b/plugins/python-build/share/python-build/3.13.11t new file mode 100644 index 00000000..518be93e --- /dev/null +++ b/plugins/python-build/share/python-build/3.13.11t @@ -0,0 +1,2 @@ +export PYTHON_BUILD_FREE_THREADING=1 +source "${BASH_SOURCE[0]%t}" diff --git a/plugins/python-build/share/python-build/patches/3.12.0/Python-3.12.0/0002-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.0/Python-3.12.0/0002-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..da0fc05e --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.0/Python-3.12.0/0002-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From ac12d63bf188f9497f8453c0447b9bc599acbf22 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index b6f90bcd8c7..b93aab935ce 100755 +--- a/configure ++++ b/configure +@@ -17552,13 +17552,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18028,12 +18022,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18608,6 +18596,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index ba768aea930..92049fb2889 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4860,7 +4860,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4870,7 +4870,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4892,6 +4892,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.1/Python-3.12.1/0002-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.1/Python-3.12.1/0002-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..f79533a0 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.1/Python-3.12.1/0002-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From a4b6c2946c6be5b732a3a3d30b8ac75673bc71e6 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 99dd1fe5958..52c4790ac74 100755 +--- a/configure ++++ b/configure +@@ -17566,13 +17566,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18042,12 +18036,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18622,6 +18610,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index bd2be94b47c..45212bd6040 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4870,7 +4870,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4880,7 +4880,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4902,6 +4902,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.10/Python-3.12.10/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.10/Python-3.12.10/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..85018374 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.10/Python-3.12.10/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 0e76b1b0219d61d389ddc4516fceb339608c6bf5 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 89edc42f45c..e099c5ad55a 100755 +--- a/configure ++++ b/configure +@@ -17614,13 +17614,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18090,12 +18084,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18670,6 +18658,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 1a02d19f1b2..f2b58421d74 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4920,7 +4920,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4930,7 +4930,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4952,6 +4952,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.11/Python-3.12.11/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.11/Python-3.12.11/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..d4303100 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.11/Python-3.12.11/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From a4720333372f8d13138101cf9d51033eacf1d422 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 89edc42f45c..e099c5ad55a 100755 +--- a/configure ++++ b/configure +@@ -17614,13 +17614,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18090,12 +18084,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18670,6 +18658,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 1a02d19f1b2..f2b58421d74 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4920,7 +4920,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4930,7 +4930,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4952,6 +4952,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.12/Python-3.12.12/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.12/Python-3.12.12/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..8ed420ca --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.12/Python-3.12.12/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 9bd15ba319eb324b12a6ecf43a4b30c5fcdcdc83 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 89edc42f45c..e099c5ad55a 100755 +--- a/configure ++++ b/configure +@@ -17614,13 +17614,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18090,12 +18084,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18670,6 +18658,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 1a02d19f1b2..f2b58421d74 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4920,7 +4920,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4930,7 +4930,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4952,6 +4952,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.13/Python-3.12.13/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.13/Python-3.12.13/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..5736977f --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.13/Python-3.12.13/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 4cfd78f7b5128da5ca9628de77feec4b768c2531 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 89edc42f45c..e099c5ad55a 100755 +--- a/configure ++++ b/configure +@@ -17614,13 +17614,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18090,12 +18084,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18670,6 +18658,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 1a02d19f1b2..f2b58421d74 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4920,7 +4920,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4930,7 +4930,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4952,6 +4952,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.14/Python-3.12.14/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.14/Python-3.12.14/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..da0fc05e --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.14/Python-3.12.14/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From ac12d63bf188f9497f8453c0447b9bc599acbf22 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index b6f90bcd8c7..b93aab935ce 100755 +--- a/configure ++++ b/configure +@@ -17552,13 +17552,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18028,12 +18022,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18608,6 +18596,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index ba768aea930..92049fb2889 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4860,7 +4860,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4870,7 +4870,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4892,6 +4892,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.2/Python-3.12.2/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.2/Python-3.12.2/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..3788d406 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.2/Python-3.12.2/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 2b0563ccd3da13eba12ceb53cfca3792df7bec44 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index e962a6aed12..7a7e3204ea9 100755 +--- a/configure ++++ b/configure +@@ -17566,13 +17566,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18042,12 +18036,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18622,6 +18610,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 384718db1f0..7f117003df7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4870,7 +4870,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4880,7 +4880,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4902,6 +4902,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.3/Python-3.12.3/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.3/Python-3.12.3/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..99f8bdb2 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.3/Python-3.12.3/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From c167d889c264347c658365acbb70bdd71c81550d Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index be783faa248..87fca7d195f 100755 +--- a/configure ++++ b/configure +@@ -17591,13 +17591,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18067,12 +18061,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18647,6 +18635,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 8be26cc0ab7..313b5bd62ce 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4888,7 +4888,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4898,7 +4898,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4920,6 +4920,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.4/Python-3.12.4/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.4/Python-3.12.4/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..0d729ef5 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.4/Python-3.12.4/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 9e0a06e1ad5baa743064a4ef3b9b0faf83e3d061 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 6dc8a66e487..b2ce2542b9d 100755 +--- a/configure ++++ b/configure +@@ -17591,13 +17591,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18067,12 +18061,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18647,6 +18635,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 8a32cb58f4e..0cec0c7aeea 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4896,7 +4896,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4906,7 +4906,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4928,6 +4928,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.5/Python-3.12.5/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.5/Python-3.12.5/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..7210088d --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.5/Python-3.12.5/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 16d9ac47e5e6b6e8020049622c697e8118999480 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4dfaeecfc0b..bec4c9ac763 100755 +--- a/configure ++++ b/configure +@@ -17591,13 +17591,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18067,12 +18061,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18647,6 +18635,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 0d6df8e24e4..cbf749da60b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4896,7 +4896,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4906,7 +4906,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4928,6 +4928,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.6/Python-3.12.6/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.6/Python-3.12.6/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..6795f4c2 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.6/Python-3.12.6/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 33d7809038f73f689c4a7d622dbf49e90774f1ff Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4dfaeecfc0b..bec4c9ac763 100755 +--- a/configure ++++ b/configure +@@ -17591,13 +17591,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18067,12 +18061,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18647,6 +18635,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 0d6df8e24e4..cbf749da60b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4896,7 +4896,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4906,7 +4906,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4928,6 +4928,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.7/Python-3.12.7/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.7/Python-3.12.7/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..1621ee1d --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.7/Python-3.12.7/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 2b8183e6b45ec2b5d591c034687e7f0ba5eb1bbc Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 1c75810d9e8..439464c2d98 100755 +--- a/configure ++++ b/configure +@@ -17591,13 +17591,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18067,12 +18061,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18647,6 +18635,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index d0d54050286..94b624b3e0c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4896,7 +4896,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4906,7 +4906,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4928,6 +4928,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.8/Python-3.12.8/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.8/Python-3.12.8/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..7bc58a49 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.8/Python-3.12.8/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From d92ec3351dd6a0cc2e2fe10bae23ffdb817de42d Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 241cf8f3d4a..62575e79243 100755 +--- a/configure ++++ b/configure +@@ -17594,13 +17594,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18070,12 +18064,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18650,6 +18638,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 9270b5f7172..7225a26752e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4899,7 +4899,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4909,7 +4909,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4931,6 +4931,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.12.9/Python-3.12.9/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch b/plugins/python-build/share/python-build/patches/3.12.9/Python-3.12.9/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch new file mode 100644 index 00000000..cb566e24 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.12.9/Python-3.12.9/0001-downstream-3.12-gh-153711-Avoid-use-of-dup3-and-pipe.patch @@ -0,0 +1,119 @@ +From 99908afd676839023dd45807502e0018e3347268 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 10:30:17 +0300 +Subject: [PATCH] (downstream) [3.12] gh-153711: Avoid use of dup3 and pipe2 + calls introduced in macOS 27 (#155211) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 33 +++++++++++-------- + configure.ac | 11 +++++-- + 3 files changed, 32 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 89edc42f45c..e099c5ad55a 100755 +--- a/configure ++++ b/configure +@@ -17614,13 +17614,7 @@ fi + ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" + if test "x$ac_cv_func_dup" = xyes + then : +- printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ printf '%s\n' "#define HAVE_DUP 1" >>confdefs.h + + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" +@@ -18090,12 +18084,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -18670,6 +18658,25 @@ fi + + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf '%s\n' "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf '%s\n' "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ ++fi ++ + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 + printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } + if test ${ac_cv_c_undeclared_builtin_options+y} +diff --git a/configure.ac b/configure.ac +index 1a02d19f1b2..f2b58421d74 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4920,7 +4920,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \ +@@ -4930,7 +4930,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_spawn posix_spawnp \ + pread preadv preadv2 pthread_condattr_setclock pthread_init pthread_kill \ + pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ + rtpSpawn sched_get_priority_max sched_rr_get_interval sched_setaffinity \ +@@ -4952,6 +4952,13 @@ if test "$MACHDEP" != linux; then + AC_CHECK_FUNCS([lchmod]) + fi + ++# macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) ++fi ++ + AC_CHECK_DECL([dirfd], + [AC_DEFINE([HAVE_DIRFD], [1], + [Define if you have the 'dirfd' function or macro.])], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.0/Python-3.13.0/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.0/Python-3.13.0/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..8450b2a1 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.0/Python-3.13.0/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 8d6715d85ad670ddfc69dbfffc8c03ac2ce166eb Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 7cdd386c387..e85f3f0ea3d 100755 +--- a/configure ++++ b/configure +@@ -17953,12 +17953,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18427,12 +18421,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19048,7 +19036,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19059,6 +19053,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 24e28a1e2de..25b0587ec12 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5088,7 +5088,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5098,7 +5098,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5126,7 +5126,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.0/Python-3.13.0/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.0/Python-3.13.0/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..5547ab1e --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.0/Python-3.13.0/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 0a97b1ca8dc1e5d689edbd87591962ba93c21db6 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index e85f3f0ea3d..3b63517ddfb 100755 +--- a/configure ++++ b/configure +@@ -19036,13 +19036,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19053,12 +19047,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19067,6 +19055,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 25b0587ec12..d4e233e24a6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5126,7 +5126,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.0t b/plugins/python-build/share/python-build/patches/3.13.0t new file mode 120000 index 00000000..77fdc6bb --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.0t @@ -0,0 +1 @@ +3.13.0 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.1/Python-3.13.1/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.1/Python-3.13.1/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..57aa95db --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.1/Python-3.13.1/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 389f221839f2b21fb8ce5faa50f97d7d6592394c Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index ae70f02f70e..4c3965e3a62 100755 +--- a/configure ++++ b/configure +@@ -17956,12 +17956,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18430,12 +18424,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19051,7 +19039,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19062,6 +19056,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index a764028e49f..1035134c48e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5091,7 +5091,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5101,7 +5101,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5129,7 +5129,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.1/Python-3.13.1/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.1/Python-3.13.1/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..8dec9ec5 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.1/Python-3.13.1/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 262ca735e924a4dfc93573c72a723c221a540aba Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4c3965e3a62..b8ba6a16c81 100755 +--- a/configure ++++ b/configure +@@ -19039,13 +19039,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19056,12 +19050,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19070,6 +19058,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 1035134c48e..2b6f37482d3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5129,7 +5129,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.10/Python-3.13.10/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.10/Python-3.13.10/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..d4f7b51d --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.10/Python-3.13.10/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From ab182dfdeff041b61fbd36c3c11433bfdfbcaa1e Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 901a26c9602..4ade7c21754 100755 +--- a/configure ++++ b/configure +@@ -18191,12 +18191,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18671,12 +18665,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19292,7 +19280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19303,6 +19297,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 597a44b331a..6ffcb8694d4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5217,7 +5217,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5227,7 +5227,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5255,7 +5255,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.10/Python-3.13.10/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.10/Python-3.13.10/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..437f1a0a --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.10/Python-3.13.10/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 1f505104c4c968b8f4478cf97c50ea2129e12a66 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4ade7c21754..6fd245e4c3b 100755 +--- a/configure ++++ b/configure +@@ -19280,13 +19280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19297,12 +19291,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19311,6 +19299,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 6ffcb8694d4..f75d0ff02ba 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5255,7 +5255,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.10t b/plugins/python-build/share/python-build/patches/3.13.10t new file mode 120000 index 00000000..99345fd8 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.10t @@ -0,0 +1 @@ +3.13.10 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.11/Python-3.13.11/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.11/Python-3.13.11/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..88f681bc --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.11/Python-3.13.11/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From dafe995d585cebef41da426be559e595134c5da9 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 901a26c9602..4ade7c21754 100755 +--- a/configure ++++ b/configure +@@ -18191,12 +18191,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18671,12 +18665,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19292,7 +19280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19303,6 +19297,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 597a44b331a..6ffcb8694d4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5217,7 +5217,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5227,7 +5227,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5255,7 +5255,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.11/Python-3.13.11/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.11/Python-3.13.11/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..b6241374 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.11/Python-3.13.11/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From c76e73a290159e530499f89addff8e0befc8230d Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4ade7c21754..6fd245e4c3b 100755 +--- a/configure ++++ b/configure +@@ -19280,13 +19280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19297,12 +19291,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19311,6 +19299,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 6ffcb8694d4..f75d0ff02ba 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5255,7 +5255,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.11t b/plugins/python-build/share/python-build/patches/3.13.11t new file mode 120000 index 00000000..05879da0 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.11t @@ -0,0 +1 @@ +3.13.11 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.12/Python-3.13.12/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.12/Python-3.13.12/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..25919c61 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.12/Python-3.13.12/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 91483b88e099ef9d4c2f3e1db1a370491120c93d Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 49b6795703a..95c9f306baa 100755 +--- a/configure ++++ b/configure +@@ -18191,12 +18191,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18671,12 +18665,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19292,7 +19280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19303,6 +19297,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 94776540d1b..747c630c329 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5217,7 +5217,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5227,7 +5227,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5255,7 +5255,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.12/Python-3.13.12/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.12/Python-3.13.12/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..344ccc47 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.12/Python-3.13.12/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 53b2f0d288f7f5b91c45da11aa9246ecab6b8f95 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 95c9f306baa..317191ae0f8 100755 +--- a/configure ++++ b/configure +@@ -19280,13 +19280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19297,12 +19291,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19311,6 +19299,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 747c630c329..d3173900340 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5255,7 +5255,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.12t b/plugins/python-build/share/python-build/patches/3.13.12t new file mode 120000 index 00000000..177facf6 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.12t @@ -0,0 +1 @@ +3.13.12 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.13/Python-3.13.13/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.13/Python-3.13.13/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..e2e87d16 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.13/Python-3.13.13/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 211716524135a5c5b322540ec19ca4f5ae6abdbc Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 9ddb712b534..ff4eedd4df9 100755 +--- a/configure ++++ b/configure +@@ -18228,12 +18228,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18708,12 +18702,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19329,7 +19317,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19340,6 +19334,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index d9acfce793e..0c20b4f2dc0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5220,7 +5220,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5230,7 +5230,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5258,7 +5258,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.13/Python-3.13.13/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.13/Python-3.13.13/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..b3058864 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.13/Python-3.13.13/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 2ffa77601e05d7c515edfb16ba6c2277675cb684 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index ff4eedd4df9..099b552e763 100755 +--- a/configure ++++ b/configure +@@ -19317,13 +19317,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19334,12 +19328,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19348,6 +19336,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 0c20b4f2dc0..3e792193278 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5258,7 +5258,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.13t b/plugins/python-build/share/python-build/patches/3.13.13t new file mode 120000 index 00000000..fb3c6783 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.13t @@ -0,0 +1 @@ +3.13.13 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.14/Python-3.13.14/0001-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.14/Python-3.13.14/0001-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..c6eb2bbb --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.14/Python-3.13.14/0001-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 690e11097e2d313513a354ffbb0517866e201831 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 0df47513085..59d67626ad6 100755 +--- a/configure ++++ b/configure +@@ -19368,13 +19368,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19385,12 +19379,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19399,6 +19387,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index a016a439c6c..c4d1e59a5e3 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5280,7 +5280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.14t b/plugins/python-build/share/python-build/patches/3.13.14t new file mode 120000 index 00000000..39e159e3 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.14t @@ -0,0 +1 @@ +3.13.14 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.1t b/plugins/python-build/share/python-build/patches/3.13.1t new file mode 120000 index 00000000..7918c7ab --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.1t @@ -0,0 +1 @@ +3.13.1 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.2/Python-3.13.2/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.2/Python-3.13.2/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..c5fe3d64 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.2/Python-3.13.2/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 72c96d07c449da15ef88369a1b4ea9ac3a76b5b5 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 1cd1f690f7b..8c6a9648485 100755 +--- a/configure ++++ b/configure +@@ -17976,12 +17976,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18450,12 +18444,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19071,7 +19059,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19082,6 +19076,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 3fcb18922c5..09223e4d2f0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5112,7 +5112,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5122,7 +5122,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5150,7 +5150,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.2/Python-3.13.2/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.2/Python-3.13.2/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..66b11dff --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.2/Python-3.13.2/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 42d1ab9db0112d76647402436bfc69251b844536 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 8c6a9648485..3c4c3584a4a 100755 +--- a/configure ++++ b/configure +@@ -19059,13 +19059,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19076,12 +19070,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19090,6 +19078,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 09223e4d2f0..c48de4ecc12 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5150,7 +5150,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.2t b/plugins/python-build/share/python-build/patches/3.13.2t new file mode 120000 index 00000000..97c68419 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.2t @@ -0,0 +1 @@ +3.13.2 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.3/Python-3.13.3/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.3/Python-3.13.3/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..0bfd7f86 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.3/Python-3.13.3/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From dbadbc64aefb216fb54c5a751c6870976ad473d9 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 1cd1f690f7b..8c6a9648485 100755 +--- a/configure ++++ b/configure +@@ -17976,12 +17976,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18450,12 +18444,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19071,7 +19059,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19082,6 +19076,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 3fcb18922c5..09223e4d2f0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5112,7 +5112,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5122,7 +5122,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5150,7 +5150,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.3/Python-3.13.3/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.3/Python-3.13.3/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..27e2de49 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.3/Python-3.13.3/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From da3966ecc33d03d3cabacaa5af11fbf933c9d135 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 8c6a9648485..3c4c3584a4a 100755 +--- a/configure ++++ b/configure +@@ -19059,13 +19059,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19076,12 +19070,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19090,6 +19078,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 09223e4d2f0..c48de4ecc12 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5150,7 +5150,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.3t b/plugins/python-build/share/python-build/patches/3.13.3t new file mode 120000 index 00000000..faedad41 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.3t @@ -0,0 +1 @@ +3.13.3 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.4/Python-3.13.4/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.4/Python-3.13.4/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..3b4f9955 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.4/Python-3.13.4/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 7707acff006c594de6216d9c911017e7ca44a4c1 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 1cd1f690f7b..8c6a9648485 100755 +--- a/configure ++++ b/configure +@@ -17976,12 +17976,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18450,12 +18444,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19071,7 +19059,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19082,6 +19076,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 3fcb18922c5..09223e4d2f0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5112,7 +5112,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5122,7 +5122,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5150,7 +5150,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.4/Python-3.13.4/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.4/Python-3.13.4/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..d9fe0a3c --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.4/Python-3.13.4/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From eb84f748e1b9f2953d534a4eaaa562ed80968d2d Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 8c6a9648485..3c4c3584a4a 100755 +--- a/configure ++++ b/configure +@@ -19059,13 +19059,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19076,12 +19070,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19090,6 +19078,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 09223e4d2f0..c48de4ecc12 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5150,7 +5150,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.4t b/plugins/python-build/share/python-build/patches/3.13.4t new file mode 120000 index 00000000..82dc52c3 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.4t @@ -0,0 +1 @@ +3.13.4 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.5/Python-3.13.5/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.5/Python-3.13.5/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..0aeb6fc7 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.5/Python-3.13.5/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From edfd8c357cabbb59e3d2db9ab7b6eb1f2eff80fe Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 519caa8ca74..f19e43c8573 100755 +--- a/configure ++++ b/configure +@@ -17976,12 +17976,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18456,12 +18450,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19077,7 +19065,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19088,6 +19082,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 2a037569e49..ce6625a752c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5112,7 +5112,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5122,7 +5122,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5150,7 +5150,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.5/Python-3.13.5/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.5/Python-3.13.5/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..498a3fe9 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.5/Python-3.13.5/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 972a7e832fa8941b6ed92d366175748fd2172639 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index f19e43c8573..89f394a998b 100755 +--- a/configure ++++ b/configure +@@ -19065,13 +19065,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19082,12 +19076,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19096,6 +19084,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index ce6625a752c..3abe99594c8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5150,7 +5150,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.5t b/plugins/python-build/share/python-build/patches/3.13.5t new file mode 120000 index 00000000..3523e81f --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.5t @@ -0,0 +1 @@ +3.13.5 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.6/Python-3.13.6/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.6/Python-3.13.6/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..51e28e4a --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.6/Python-3.13.6/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 583757a560f95d29d4a8078dd1bcbdf3c3de1678 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 901a26c9602..4ade7c21754 100755 +--- a/configure ++++ b/configure +@@ -18191,12 +18191,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18671,12 +18665,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19292,7 +19280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19303,6 +19297,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 597a44b331a..6ffcb8694d4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5217,7 +5217,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5227,7 +5227,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5255,7 +5255,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.6/Python-3.13.6/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.6/Python-3.13.6/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..f67c1b9f --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.6/Python-3.13.6/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 8d221378537d08de2a43e1cbfcfbdf7a5613292b Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4ade7c21754..6fd245e4c3b 100755 +--- a/configure ++++ b/configure +@@ -19280,13 +19280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19297,12 +19291,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19311,6 +19299,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 6ffcb8694d4..f75d0ff02ba 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5255,7 +5255,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.6t b/plugins/python-build/share/python-build/patches/3.13.6t new file mode 120000 index 00000000..78472f99 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.6t @@ -0,0 +1 @@ +3.13.6 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.7/Python-3.13.7/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.7/Python-3.13.7/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..7de70b0a --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.7/Python-3.13.7/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From fd99fe3b35195f34b00d0ba0ca8c26958e28fed4 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 901a26c9602..4ade7c21754 100755 +--- a/configure ++++ b/configure +@@ -18191,12 +18191,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18671,12 +18665,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19292,7 +19280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19303,6 +19297,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 597a44b331a..6ffcb8694d4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5217,7 +5217,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5227,7 +5227,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5255,7 +5255,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.7/Python-3.13.7/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.7/Python-3.13.7/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..f4fa8d3b --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.7/Python-3.13.7/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From f8dd6d4a22e74635cb2e1e7e8ad47033f06a4946 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4ade7c21754..6fd245e4c3b 100755 +--- a/configure ++++ b/configure +@@ -19280,13 +19280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19297,12 +19291,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19311,6 +19299,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 6ffcb8694d4..f75d0ff02ba 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5255,7 +5255,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.7t b/plugins/python-build/share/python-build/patches/3.13.7t new file mode 120000 index 00000000..7acdc739 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.7t @@ -0,0 +1 @@ +3.13.7 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.8/Python-3.13.8/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.8/Python-3.13.8/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..a0b890fa --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.8/Python-3.13.8/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 8f7c908415d76ab2e71f6bc6479c912c1ba99bd2 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 901a26c9602..4ade7c21754 100755 +--- a/configure ++++ b/configure +@@ -18191,12 +18191,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18671,12 +18665,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19292,7 +19280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19303,6 +19297,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 597a44b331a..6ffcb8694d4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5217,7 +5217,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5227,7 +5227,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5255,7 +5255,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.8/Python-3.13.8/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.8/Python-3.13.8/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..a53dc267 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.8/Python-3.13.8/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From c706d5d58dc4f620b665258946f86d0f48ad39f8 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4ade7c21754..6fd245e4c3b 100755 +--- a/configure ++++ b/configure +@@ -19280,13 +19280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19297,12 +19291,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19311,6 +19299,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 6ffcb8694d4..f75d0ff02ba 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5255,7 +5255,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.8t b/plugins/python-build/share/python-build/patches/3.13.8t new file mode 120000 index 00000000..0b9554bc --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.8t @@ -0,0 +1 @@ +3.13.8 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.13.9/Python-3.13.9/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.13.9/Python-3.13.9/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..badca20d --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.9/Python-3.13.9/0001-3.13-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From b0c32c8d11e63c3cc6f8741e3362e67965b5e446 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:20 +0800 +Subject: [PATCH] [3.13] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150448) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 901a26c9602..4ade7c21754 100755 +--- a/configure ++++ b/configure +@@ -18191,12 +18191,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -18671,12 +18665,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -19292,7 +19280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19303,6 +19297,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 597a44b331a..6ffcb8694d4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5217,7 +5217,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5227,7 +5227,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ + pthread_kill ptsname ptsname_r pwrite pwritev pwritev2 readlink readlinkat readv realpath renameat \ +@@ -5255,7 +5255,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.9/Python-3.13.9/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.13.9/Python-3.13.9/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..c00b2521 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.9/Python-3.13.9/0002-3.13-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,103 @@ +From 3fc7c23cce6b846952067df633f113510a83e2c3 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:30:17 -0700 +Subject: [PATCH] [3.13] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155211) + +This prevents potential segfaults when builds are used on older +systems and avoids adding new code for supporting weaklinking. +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 4ade7c21754..6fd245e4c3b 100755 +--- a/configure ++++ b/configure +@@ -19280,13 +19280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -19297,12 +19291,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -19311,6 +19299,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 6ffcb8694d4..f75d0ff02ba 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5255,7 +5255,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.13.9t b/plugins/python-build/share/python-build/patches/3.13.9t new file mode 120000 index 00000000..4fd0f831 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.13.9t @@ -0,0 +1 @@ +3.13.9 \ No newline at end of file diff --git a/plugins/python-build/share/python-build/patches/3.14.0/Python-3.14.0/0003-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.14.0/Python-3.14.0/0003-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..2873fd3f --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.0/Python-3.14.0/0003-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From bf2d8d5a2c8fd2e0c5b4368ea7180c57971bc156 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:16 +0800 +Subject: [PATCH] [3.14] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150447) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index d31c24dffa2..29190f296af 100755 +--- a/configure ++++ b/configure +@@ -19250,12 +19250,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -19730,12 +19724,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -20381,7 +20369,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20392,6 +20386,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index af7a9623d7b..4c5bf12cc50 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5214,7 +5214,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dladdr dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dladdr dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5224,7 +5224,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv \ + pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ +@@ -5255,7 +5255,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.0/Python-3.14.0/0004-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.14.0/Python-3.14.0/0004-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..36edad49 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.0/Python-3.14.0/0004-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,101 @@ +From b871bbe60698c7a6bb6409cf4c091088e119eeb3 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:27:28 -0700 +Subject: [PATCH] [3.14] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155206) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 29190f296af..2217e59d15f 100755 +--- a/configure ++++ b/configure +@@ -20369,13 +20369,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20386,12 +20380,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -20400,6 +20388,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 4c5bf12cc50..4ad84af4d17 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5255,7 +5255,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.1/Python-3.14.1/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.14.1/Python-3.14.1/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..6d2fbfe6 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.1/Python-3.14.1/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From bc2b13dee7629b9c86dc53106311fe26de1a98a5 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:16 +0800 +Subject: [PATCH] [3.14] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150447) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 46eb0665bf4..3f138a8ff11 100755 +--- a/configure ++++ b/configure +@@ -19281,12 +19281,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -19761,12 +19755,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -20412,7 +20400,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20423,6 +20417,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index bd4446e9488..9fdb671d44d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5239,7 +5239,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dladdr dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dladdr dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5249,7 +5249,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv \ + pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ +@@ -5280,7 +5280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.1/Python-3.14.1/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.14.1/Python-3.14.1/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..4f1a47dd --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.1/Python-3.14.1/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,101 @@ +From 2d7a52cf26a57b14fde53897d782db55e63fb356 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:27:28 -0700 +Subject: [PATCH] [3.14] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155206) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 3f138a8ff11..e38f8d8ab32 100755 +--- a/configure ++++ b/configure +@@ -20400,13 +20400,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20417,12 +20411,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -20431,6 +20419,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 9fdb671d44d..9e301b6ce6e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5280,7 +5280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.2/Python-3.14.2/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.14.2/Python-3.14.2/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..136e1787 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.2/Python-3.14.2/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 5c927bf09aae2221636300e45187c27b8018766d Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:16 +0800 +Subject: [PATCH] [3.14] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150447) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 46eb0665bf4..3f138a8ff11 100755 +--- a/configure ++++ b/configure +@@ -19281,12 +19281,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -19761,12 +19755,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -20412,7 +20400,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20423,6 +20417,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index bd4446e9488..9fdb671d44d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5239,7 +5239,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dladdr dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dladdr dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5249,7 +5249,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv \ + pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ +@@ -5280,7 +5280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.2/Python-3.14.2/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.14.2/Python-3.14.2/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..4fc9dc9b --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.2/Python-3.14.2/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,101 @@ +From cb9757118e29df43276f01701e73fe50c57b1b25 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:27:28 -0700 +Subject: [PATCH] [3.14] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155206) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 3f138a8ff11..e38f8d8ab32 100755 +--- a/configure ++++ b/configure +@@ -20400,13 +20400,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20417,12 +20411,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -20431,6 +20419,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 9fdb671d44d..9e301b6ce6e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5280,7 +5280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.3/Python-3.14.3/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.14.3/Python-3.14.3/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..b1511265 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.3/Python-3.14.3/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 14dbab4f78b96ddc611b50558c50b548ae744032 Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:16 +0800 +Subject: [PATCH] [3.14] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150447) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 645628fecf2..2dae6dd38dc 100755 +--- a/configure ++++ b/configure +@@ -19281,12 +19281,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -19761,12 +19755,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -20412,7 +20400,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20423,6 +20417,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index d81c76fc122..20411ee381c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5239,7 +5239,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dladdr dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dladdr dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5249,7 +5249,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv \ + pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ +@@ -5280,7 +5280,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.3/Python-3.14.3/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.14.3/Python-3.14.3/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..080ec904 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.3/Python-3.14.3/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,101 @@ +From 78204cc8e5beb318cee9bf831146bd339602c4c3 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:27:28 -0700 +Subject: [PATCH] [3.14] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155206) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 2dae6dd38dc..74c9f7e0a3c 100755 +--- a/configure ++++ b/configure +@@ -20400,13 +20400,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20417,12 +20411,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -20431,6 +20419,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 20411ee381c..9c4fef6971e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5280,7 +5280,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.4/Python-3.14.4/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.14.4/Python-3.14.4/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..bcbfdf90 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.4/Python-3.14.4/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 3ccb6c32cce56e55823dc406e2cdd8f33d588bba Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:16 +0800 +Subject: [PATCH] [3.14] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150447) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 8cfdda5a29b..c3e9474bbec 100755 +--- a/configure ++++ b/configure +@@ -19321,12 +19321,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -19801,12 +19795,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -20452,7 +20440,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20463,6 +20457,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 1acb91fd27b..67128cc4ad0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5242,7 +5242,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dladdr dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dladdr dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5252,7 +5252,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv \ + pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ +@@ -5283,7 +5283,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.4/Python-3.14.4/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.14.4/Python-3.14.4/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..1fda7402 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.4/Python-3.14.4/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,101 @@ +From 0883623df9ba2ea83d2f9dc3031ac9d975824d98 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:27:28 -0700 +Subject: [PATCH] [3.14] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155206) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index c3e9474bbec..89233599659 100755 +--- a/configure ++++ b/configure +@@ -20440,13 +20440,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20457,12 +20451,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -20471,6 +20459,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 67128cc4ad0..c004fce7770 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5283,7 +5283,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.5/Python-3.14.5/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch b/plugins/python-build/share/python-build/patches/3.14.5/Python-3.14.5/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch new file mode 100644 index 00000000..eb4fb73e --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.5/Python-3.14.5/0002-3.14-gh-150443-Exclude-explicit-dup3-and-pipe2-check.patch @@ -0,0 +1,105 @@ +From 972bdb3578e667c1fad1b09f3ec6355229c069cd Mon Sep 17 00:00:00 2001 +From: Russell Keith-Magee +Date: Tue, 26 May 2026 13:07:16 +0800 +Subject: [PATCH] [3.14] gh-150443: Exclude explicit dup3 and pipe2 checks on + iOS builds. (GH-150444) (#150447) + +Exclude explicit dup3 and pipe2 checks on iOS builds. +(cherry picked from commit 629da5c914b4407e01c1dc06cbcbd8dce825fef3) +--- + configure | 26 +++++++++++++------------- + configure.ac | 6 +++--- + 2 files changed, 16 insertions(+), 16 deletions(-) + +diff --git a/configure b/configure +index 30590a397f8..a5308e561aa 100755 +--- a/configure ++++ b/configure +@@ -19375,12 +19375,6 @@ if test "x$ac_cv_func_dup" = xyes + then : + printf "%s\n" "#define HAVE_DUP 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "execv" "ac_cv_func_execv" + if test "x$ac_cv_func_execv" = xyes +@@ -19855,12 +19849,6 @@ if test "x$ac_cv_func_pipe" = xyes + then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" + if test "x$ac_cv_func_plock" = xyes +@@ -20506,7 +20494,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20517,6 +20511,12 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +diff --git a/configure.ac b/configure.ac +index 87c0ead45a6..4ff68cd36a5 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5264,7 +5264,7 @@ fi + # checks for library functions + AC_CHECK_FUNCS([ \ + accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \ +- copy_file_range ctermid dladdr dup dup3 execv explicit_bzero explicit_memset \ ++ copy_file_range ctermid dladdr dup execv explicit_bzero explicit_memset \ + faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \ + fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \ + gai_strerror getegid geteuid getgid getgrent getgrgid getgrgid_r \ +@@ -5274,7 +5274,7 @@ AC_CHECK_FUNCS([ \ + getspnam getuid getwd grantpt if_nameindex initgroups kill killpg lchown linkat \ + lockf lstat lutimes madvise mbrtowc memrchr mkdirat mkfifo mkfifoat \ + mknod mknodat mktime mmap mremap nice openat opendir pathconf pause pipe \ +- pipe2 plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ ++ plock poll posix_fadvise posix_fallocate posix_openpt posix_spawn posix_spawnp \ + posix_spawn_file_actions_addclosefrom_np \ + pread preadv preadv2 process_vm_readv \ + pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_init \ +@@ -5305,7 +5305,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([getentropy getgroups system]) ++ AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.5/Python-3.14.5/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.14.5/Python-3.14.5/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..1b028a54 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.5/Python-3.14.5/0003-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,101 @@ +From d9fe3c8f79460f2ed5309b9fd667cfdc2a3a0462 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:27:28 -0700 +Subject: [PATCH] [3.14] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155206) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index a5308e561aa..76ca500c68b 100755 +--- a/configure ++++ b/configure +@@ -20494,13 +20494,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20511,12 +20505,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -20525,6 +20513,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index 4ff68cd36a5..b9f5217704f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5305,7 +5305,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + diff --git a/plugins/python-build/share/python-build/patches/3.14.6/Python-3.14.6/0002-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch b/plugins/python-build/share/python-build/patches/3.14.6/Python-3.14.6/0002-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch new file mode 100644 index 00000000..e5e2b2c8 --- /dev/null +++ b/plugins/python-build/share/python-build/patches/3.14.6/Python-3.14.6/0002-3.14-gh-153711-Avoid-use-of-dup3-and-pipe2-calls-int.patch @@ -0,0 +1,101 @@ +From 39bab3a49d6f952c55c036aef1872c7d6f701039 Mon Sep 17 00:00:00 2001 +From: Ned Deily +Date: Wed, 5 Aug 2026 00:27:28 -0700 +Subject: [PATCH] [3.14] gh-153711: Avoid use of dup3 and pipe2 calls + introduced in macOS 27 (#155206) + +--- + ...-08-05-02-02-33.gh-issue-153711.pO9fFb.rst | 3 ++ + configure | 32 +++++++++++-------- + configure.ac | 8 ++++- + 3 files changed, 29 insertions(+), 14 deletions(-) + create mode 100644 Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst + +diff --git a/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +new file mode 100644 +index 00000000000..90804c179a4 +--- /dev/null ++++ b/Misc/NEWS.d/next/macOS/2026-08-05-02-02-33.gh-issue-153711.pO9fFb.rst +@@ -0,0 +1,3 @@ ++On macOS, do not attempt to use the :manpage:`dup3(2)` and ++:manpage:`pipe2(2)` system calls introduced in ++macOS 27 to prevent problems when running on older systems. +diff --git a/configure b/configure +index 2088290f0ee..6d669963272 100755 +--- a/configure ++++ b/configure +@@ -20494,13 +20494,7 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" +-if test "x$ac_cv_func_dup3" = xyes +-then : +- printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h +- +-fi +-ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" ++ ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy" + if test "x$ac_cv_func_getentropy" = xyes + then : + printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h +@@ -20511,12 +20505,6 @@ if test "x$ac_cv_func_getgroups" = xyes + then : + printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h + +-fi +-ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" +-if test "x$ac_cv_func_pipe2" = xyes +-then : +- printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h +- + fi + ac_fn_c_check_func "$LINENO" "system" "ac_cv_func_system" + if test "x$ac_cv_func_system" = xyes +@@ -20525,6 +20513,24 @@ then : + + fi + ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" ++if test "x$ac_cv_func_dup3" = xyes ++then : ++ printf "%s\n" "#define HAVE_DUP3 1" >>confdefs.h ++ ++fi ++ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" ++if test "x$ac_cv_func_pipe2" = xyes ++then : ++ printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h ++ ++fi ++ + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +diff --git a/configure.ac b/configure.ac +index aed14946731..900bf6215e0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5305,7 +5305,13 @@ fi + # header definition prevents usage - autoconf doesn't use the headers), or + # raise an error if used at runtime. Force these symbols off. + if test "$ac_sys_system" != "iOS" ; then +- AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system]) ++ AC_CHECK_FUNCS([getentropy getgroups system]) ++fi ++# In addition, macOS introduced dup3 and pipe2 in macOS 27, late in the ++# lifetime of this version of Python. Rather than adding weaklinking ++# support for them, just continue to ignore them. ++if test "$ac_sys_system" != "iOS" -a "$ac_sys_system" != "Darwin"; then ++ AC_CHECK_FUNCS([dup3 pipe2]) + fi + + AC_CHECK_DECL([dirfd], +-- +2.55.0.windows.3 + 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 </dev/null; then if [ -n "$PYENV_NATIVE_EXT" ]; then echo "pyenv: failed to load \`realpath' builtin" >&2 @@ -27,6 +33,9 @@ setup() { PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin PATH="${PYENV_TEST_DIR}/bin:$PATH" PATH="${_PYENV_INSTALL_PREFIX}/libexec:$PATH" + if [[ -n $PLUGIN_PREFIX ]]; then + PATH="${PLUGIN_PREFIX}/libexec:${PLUGIN_PREFIX}/bin:$PATH" + fi PATH="${BATS_TEST_DIRNAME}/libexec:$PATH" PATH="${PYENV_ROOT}/shims:$PATH" PATH="${BATS_TEST_TMPDIR}/stubs:$PATH" @@ -40,6 +49,7 @@ setup() { # even if its output is redirected, breaking the comparison logic export NO_COLOR=1 + # If test specific setup exist, run it if [[ $(type -t _setup) == function ]];then _setup