From f46b669f1d77e87cf0ff99795106b262ca285071 Mon Sep 17 00:00:00 2001 From: yfprojects <62463991+real-yfprojects@users.noreply.github.com> Date: Tue, 6 Jun 2023 11:09:59 +0000 Subject: [PATCH 01/16] Initial commit --- LICENSE | 21 +++++++++++++++++++++ README.md | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..b32e7f6d --- /dev/null +++ b/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/README.md b/README.md new file mode 100644 index 00000000..882dbf34 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# pyenv-link +A pyenv plugin for linking python versions and virtual envs into your pyenv root. From dffc750fa2c21c4d81deeff92aa2453e01204039 Mon Sep 17 00:00:00 2001 From: real-yfprojects Date: Tue, 6 Jun 2023 16:03:16 +0200 Subject: [PATCH 02/16] Initial implementation * bin/pyenv-link * bin/pyenv-link-version --- bin/pyenv-link | 31 +++++++++ bin/pyenv-link-version | 138 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+) create mode 100755 bin/pyenv-link create mode 100755 bin/pyenv-link-version diff --git a/bin/pyenv-link b/bin/pyenv-link new file mode 100755 index 00000000..fffb9692 --- /dev/null +++ b/bin/pyenv-link @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# +# Summary: Activate virtual environment +# +# Usage: pyenv link version +# +# 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 virtual python environments location. + +set -e +[ -n "$PYENV_DEBUG" ] && set -x + +# Provide pyenv completions +case "$1" in +--complete) + echo --version + pyenv-link-version --complete + exit + ;; +version) + shift + pyenv-link-version "$@" + exit $? + ;; +*) + pyenv-help --usage link >&2 + exit 1 + ;; +esac diff --git a/bin/pyenv-link-version b/bin/pyenv-link-version new file mode 100755 index 00000000..c2fc9c29 --- /dev/null +++ b/bin/pyenv-link-version @@ -0,0 +1,138 @@ +#!/usr/bin/env bash +# +# Summary: Activate virtual environment +# +# Usage: pyenv link-venv [--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 virtual python environments location. +# 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() { + echo "$(cd "$1" && pwd)" + } +fi + +array_doesnt_contain() { + local array="$1[@]" + local seeking=$2 + local in=0 + for element in "${!array}"; do + if [[ $element == "$seeking" ]]; then + in=1 + break + fi + done + return $in +} + +COMMON_VENV_NAMES=('venv' 'env' '.venv' '.env' 'ENV' 'VENV') +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') + fi + + # guess venv name from name of venv directory + local venv_dir_name=${venv_dir##*/} + if [ -z "$name" ] && array_doesnt_contain COMMON_VENV_NAMES "$venv_dir_name"; then + name=$venv_dir_name + 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 + +# check whether version exists already +if pyenv-prefix "$venv_name"; then + echo Version "$venv_name" already exists >&2 + exit 3 +fi + +# construct location to link to +pyenv_prefix_path="$PYENV_ROOT/versions/$venv_name" + +# link to pyenv version directory +if [ -z "$dry" ]; then + ln --symbolic "$venv_dir" "$pyenv_prefix_path" +fi + +# output +[ -z "$quiet" ] && echo Linked new version named "$venv_name" || true From d428be59ec28352544348b99ef85b81b3f61c3d2 Mon Sep 17 00:00:00 2001 From: real-yfprojects Date: Tue, 6 Jun 2023 16:39:52 +0200 Subject: [PATCH 03/16] Write README. * README.md --- README.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 882dbf34..67fa6379 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,62 @@ # pyenv-link -A pyenv plugin for linking python versions and virtual envs into your pyenv root. +A [pyenv](https://github.com/pyenv/pyenv) plugin for linking python versions and virtual envs into your pyenv root. + +This plugin recommends the [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv/) plugin. + +## Installation + +This will install the latest development version of *pyenv-link* into +the `$(pyenv root)/plugins/pyenv-link` directory. + +**Important note:** If you installed pyenv into a non-standard directory, make +sure that you clone this repo into the 'plugins' directory of wherever you +installed into. + +From inside that directory you can: + - Check out a specific release tag. + - Get the latest development release by running `git pull` to download the + latest changes. + + +```bash +git clone https://github.com/real-yfprojects/pyenv-link.git $(pyenv root)/plugins/pyenv-link +``` + +For the Fish shell: + +```fish +git clone https://github.com/real-yfprojects/pyenv-link.git (pyenv root)/plugins/pyenv-link +``` + +## 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-py3.10 +``` + +You can also specify a name to use for the venv. + +```console +$ pyenv link version .venv myname +Linked new version named myname +``` + +Now you can make pyenv activate/use the venv automatically: + +```console +$ pyenv local myproject-py3.10 +``` + +## Contributing +This project is developed in an open-source, community-driven way, as a voluntary effort in the authors’ free time. + +All kinds of contributions are greatly appreciated. This not only includes implementing new features but also refactoring work or improvements to the documentation. +Bug reports, feature requests and other suggestions are welcome too. + +### TODO + +- [ ] Tests +- [ ] CI \ No newline at end of file From ba9099392a152841930eabf782726f70f04d3b71 Mon Sep 17 00:00:00 2001 From: real-yfprojects Date: Tue, 6 Jun 2023 16:48:19 +0200 Subject: [PATCH 04/16] Fix completions * bin/pyenv-link --- bin/pyenv-link | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bin/pyenv-link b/bin/pyenv-link index fffb9692..1992e229 100755 --- a/bin/pyenv-link +++ b/bin/pyenv-link @@ -15,9 +15,12 @@ set -e # Provide pyenv completions case "$1" in --complete) - echo --version - pyenv-link-version --complete - exit + if [ -z "$2" ]; then + echo version + else + shift 2 + pyenv-link-version --complete "$@" + fi ;; version) shift From b8d8dee191c04a1fc10ba2b2f39f131dceb18e8a Mon Sep 17 00:00:00 2001 From: real-yfprojects Date: Tue, 6 Jun 2023 16:59:25 +0200 Subject: [PATCH 05/16] Fix output * bin/pyenv-link-version --- bin/pyenv-link-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/pyenv-link-version b/bin/pyenv-link-version index c2fc9c29..55a1102d 100755 --- a/bin/pyenv-link-version +++ b/bin/pyenv-link-version @@ -121,7 +121,7 @@ if [ -z "$venv_name" ]; then fi # check whether version exists already -if pyenv-prefix "$venv_name"; then +if pyenv-prefix "$venv_name" >/dev/null 2>&1; then echo Version "$venv_name" already exists >&2 exit 3 fi From 2f8cb2cf1f093e955a72babf0b65a07f84f33522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20M=C3=A1t=C3=A9=20R=C3=B3bert?= Date: Fri, 7 Jul 2023 16:18:02 +0200 Subject: [PATCH 06/16] Handle osx specific `ln` option name (#1) On OSX `ln` does not have `--symbolic` only `-s`. * bin/pyenv-link-version --------- Co-authored-by: yfprojects <62463991+real-yfprojects@users.noreply.github.com> --- bin/pyenv-link-version | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bin/pyenv-link-version b/bin/pyenv-link-version index 55a1102d..45fd4f67 100755 --- a/bin/pyenv-link-version +++ b/bin/pyenv-link-version @@ -131,7 +131,14 @@ pyenv_prefix_path="$PYENV_ROOT/versions/$venv_name" # link to pyenv version directory if [ -z "$dry" ]; then - ln --symbolic "$venv_dir" "$pyenv_prefix_path" + # Handle OS types + case "$(uname -s)" in + Darwin*) + # long form flags aren't supported + ln -s "$venv_dir" "$pyenv_prefix_path";; + *) + ln --symbolic "$venv_dir" "$pyenv_prefix_path";; + esac fi # output From 265b0dcefa0e71d7d89f1596309ecb677816750f Mon Sep 17 00:00:00 2001 From: Ayush <63203492+macayu17@users.noreply.github.com> Date: Wed, 2 Sep 2026 20:26:35 +0530 Subject: [PATCH 07/16] python-build: add build prerequisite installer (#3532) --- .github/actions/build-python/action.yml | 16 ++-- .github/workflows/modified_scripts_build.yml | 10 +-- plugins/python-build/README.md | 8 +- .../bin/pyenv-install-prerequisites | 47 +++++++++++ .../test/install-prerequisites.bats | 83 +++++++++++++++++++ plugins/python-build/test/test_helper.bash | 3 +- 6 files changed, 146 insertions(+), 21 deletions(-) create mode 100755 plugins/python-build/bin/pyenv-install-prerequisites create mode 100644 plugins/python-build/test/install-prerequisites.bats 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..cae758a8 100644 --- a/.github/workflows/modified_scripts_build.yml +++ b/.github/workflows/modified_scripts_build.yml @@ -220,10 +220,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 +280,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/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/test/install-prerequisites.bats b/plugins/python-build/test/install-prerequisites.bats new file mode 100644 index 00000000..2630c238 --- /dev/null +++ b/plugins/python-build/test/install-prerequisites.bats @@ -0,0 +1,83 @@ +#!/usr/bin/env bats + +load test_helper + +_setup() { + 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" +} + +@test "completion does not install packages" { + stub apt-get + + PATH="${BATS_TEST_DIRNAME}/../../../libexec:$PATH" \ + run pyenv completions install-prerequisites + + assert_success "--help" + unstub apt-get +} + +@test "supports help" { + stub pyenv-help 'install-prerequisites : echo "Usage: pyenv install-prerequisites"' + + run pyenv-install-prerequisites --help + + assert_success "Usage: pyenv install-prerequisites" + unstub pyenv-help +} + +@test "rejects arguments" { + stub pyenv-help 'install-prerequisites : echo "Usage: pyenv install-prerequisites"' + + run pyenv-install-prerequisites unexpected + + assert_failure "Usage: pyenv install-prerequisites" + unstub pyenv-help +} + +@test "installs build prerequisites with apt-get as root" { + stub id '-u : echo 0' + stub apt-get \ + 'update -q : true' \ + "install -yq ${prerequisites} : true" + + run pyenv-install-prerequisites + + assert_success + unstub apt-get + unstub id +} + +@test "uses sudo when not running as root" { + stub id '-u : echo 1000' + stub apt-get + stub sudo \ + 'apt-get update -q : true' \ + "apt-get install -yq ${prerequisites} : true" + + run pyenv-install-prerequisites + + assert_success + unstub sudo + unstub apt-get + unstub id +} + +@test "fails when apt-get is unavailable" { + PATH="$(path_without apt-get)" run pyenv-install-prerequisites + + assert_failure "pyenv: installing build prerequisites is not supported on this system" +} + +@test "fails when sudo is unavailable for an unprivileged user" { + stub id '-u : echo 1000' + stub apt-get + + PATH="$(path_without sudo)" run pyenv-install-prerequisites + + assert_failure "pyenv: sudo is required to install build prerequisites" + unstub apt-get + unstub id +} diff --git a/plugins/python-build/test/test_helper.bash b/plugins/python-build/test/test_helper.bash index a72806ab..5b36e7e9 100644 --- a/plugins/python-build/test/test_helper.bash +++ b/plugins/python-build/test/test_helper.bash @@ -2,6 +2,7 @@ setup() { export PYTHON_BUILD_CURL_OPTS= export PYTHON_BUILD_HTTP_CLIENT="curl" + export PYENV_TEST_DIR="${BATS_TEST_TMPDIR}/pyenv" export FIXTURE_ROOT="${BATS_TEST_DIRNAME}/fixtures" export INSTALL_ROOT="${BATS_TEST_TMPDIR}/install" PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" @@ -148,7 +149,7 @@ path_without() { if [ "$found" != "${PYENV_ROOT}/shims" ]; then alt="${PYENV_TEST_DIR}/$(echo "${found#/}" | tr '/' '-')" mkdir -p "$alt" - for util in bash head cut readlink greadlink; do + for util in bash head cut readlink greadlink tr; do if [ -x "${found}/$util" ]; then ln -s "${found}/$util" "${alt}/$util" fi From ef7a9f5d1417c4ef09d206298f8ec7a284994072 Mon Sep 17 00:00:00 2001 From: Michael Newman Date: Sun, 6 Sep 2026 15:14:47 -0400 Subject: [PATCH 08/16] docs: Add link to list of available Python distributions (#3535) Add a link to the python-build share directory in the intro section so users can see which Python distributions are supported before installing pyenv. --- README.md | 2 ++ 1 file changed, 2 insertions(+) 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**. From 798a1ad60398a38c28afc94bab7ab55982bdbf69 Mon Sep 17 00:00:00 2001 From: macayu17 Date: Tue, 8 Sep 2026 09:42:50 +0300 Subject: [PATCH 09/16] Incorporate the `pyenv-link` plugin * Adapt test_helper for use in plugins * Add pyenv-link tests * Add pyenv-link tests to CI --- Makefile | 36 +++++++++++- plugins/.gitignore | 1 + plugins/pyenv-link/README.md | 49 ++++------------ plugins/pyenv-link/bin/pyenv-link | 6 +- plugins/pyenv-link/bin/pyenv-link-version | 71 ++++++++++++----------- plugins/pyenv-link/test/link.bats | 61 +++++++++++++++++++ plugins/pyenv-link/test/test_helper.bash | 1 + test/test_helper.bash | 12 +++- 8 files changed, 158 insertions(+), 79 deletions(-) create mode 100644 plugins/pyenv-link/test/link.bats create mode 120000 plugins/pyenv-link/test/test_helper.bash 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/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-link/README.md b/plugins/pyenv-link/README.md index 67fa6379..9e4cd294 100644 --- a/plugins/pyenv-link/README.md +++ b/plugins/pyenv-link/README.md @@ -1,40 +1,15 @@ # pyenv-link -A [pyenv](https://github.com/pyenv/pyenv) plugin for linking python versions and virtual envs into your pyenv root. +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. -## Installation - -This will install the latest development version of *pyenv-link* into -the `$(pyenv root)/plugins/pyenv-link` directory. - -**Important note:** If you installed pyenv into a non-standard directory, make -sure that you clone this repo into the 'plugins' directory of wherever you -installed into. - -From inside that directory you can: - - Check out a specific release tag. - - Get the latest development release by running `git pull` to download the - latest changes. - - -```bash -git clone https://github.com/real-yfprojects/pyenv-link.git $(pyenv root)/plugins/pyenv-link -``` - -For the Fish shell: - -```fish -git clone https://github.com/real-yfprojects/pyenv-link.git (pyenv root)/plugins/pyenv-link -``` - ## 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-py3.10 +Linked new version named myproject ``` You can also specify a name to use for the venv. @@ -44,19 +19,15 @@ $ 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-py3.10 +$ pyenv local myproject ``` - -## Contributing -This project is developed in an open-source, community-driven way, as a voluntary effort in the authors’ free time. - -All kinds of contributions are greatly appreciated. This not only includes implementing new features but also refactoring work or improvements to the documentation. -Bug reports, feature requests and other suggestions are welcome too. - -### TODO - -- [ ] Tests -- [ ] CI \ No newline at end of file diff --git a/plugins/pyenv-link/bin/pyenv-link b/plugins/pyenv-link/bin/pyenv-link index 1992e229..85b008e3 100755 --- a/plugins/pyenv-link/bin/pyenv-link +++ b/plugins/pyenv-link/bin/pyenv-link @@ -1,13 +1,13 @@ #!/usr/bin/env bash # -# Summary: Activate virtual environment +# Summary: Link a Python environment as a pyenv version # -# Usage: pyenv link 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 virtual python environments location. +# should be a path to a Python installation or virtual environment. set -e [ -n "$PYENV_DEBUG" ] && set -x diff --git a/plugins/pyenv-link/bin/pyenv-link-version b/plugins/pyenv-link/bin/pyenv-link-version index 45fd4f67..7df1d16e 100755 --- a/plugins/pyenv-link/bin/pyenv-link-version +++ b/plugins/pyenv-link/bin/pyenv-link-version @@ -1,13 +1,13 @@ #!/usr/bin/env bash # -# Summary: Activate virtual environment +# Summary: Link a Python environment as a pyenv version # -# Usage: pyenv link-venv [--dry] [--quiet] [] +# 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 virtual python environments location. +# 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 @@ -26,24 +26,10 @@ if ! { # work-around when realpath is unavailable realpath() { - echo "$(cd "$1" && pwd)" + (cd "$1" && pwd) } fi -array_doesnt_contain() { - local array="$1[@]" - local seeking=$2 - local in=0 - for element in "${!array}"; do - if [[ $element == "$seeking" ]]; then - in=1 - break - fi - done - return $in -} - -COMMON_VENV_NAMES=('venv' 'env' '.venv' '.env' 'ENV' 'VENV') guess_name() { local venv_dir=$1 local name @@ -53,12 +39,20 @@ guess_name() { 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" ] && array_doesnt_contain COMMON_VENV_NAMES "$venv_dir_name"; then - name=$venv_dir_name + 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 @@ -120,26 +114,37 @@ if [ -z "$venv_name" ]; then venv_name=$(guess_name "$venv_dir") fi -# check whether version exists already -if pyenv-prefix "$venv_name" >/dev/null 2>&1; then +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 -# construct location to link to -pyenv_prefix_path="$PYENV_ROOT/versions/$venv_name" +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 - # Handle OS types - case "$(uname -s)" in - Darwin*) - # long form flags aren't supported - ln -s "$venv_dir" "$pyenv_prefix_path";; - *) - ln --symbolic "$venv_dir" "$pyenv_prefix_path";; - esac + mkdir -p "$versions_dir" + ln -s "$link_target" "$pyenv_prefix_path" fi # output -[ -z "$quiet" ] && echo Linked new version named "$venv_name" || true +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/test/test_helper.bash b/test/test_helper.bash index ee0a698e..2015907f 100644 --- a/test/test_helper.bash +++ b/test/test_helper.bash @@ -2,8 +2,14 @@ unset PYENV_VERSION unset PYENV_DIR setup() { - export _PYENV_INSTALL_PREFIX="${BATS_TEST_DIRNAME%/*}" export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' + + export _PYENV_INSTALL_PREFIX="${BATS_TEST_DIRNAME%/*}" + local PLUGIN_PREFIX + if [[ $_PYENV_INSTALL_PREFIX =~ /plugins/[^/]+$ ]]; then + PLUGIN_PREFIX="$_PYENV_INSTALL_PREFIX" + _PYENV_INSTALL_PREFIX="${_PYENV_INSTALL_PREFIX::${#_PYENV_INSTALL_PREFIX}-${#BASH_REMATCH[0]}}" + fi if ! enable -f "${_PYENV_INSTALL_PREFIX}"/libexec/pyenv-realpath.dylib realpath 2>/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 From 88e9ab13e8fd603c732a4f43f1ff3d1c2d264b6a Mon Sep 17 00:00:00 2001 From: Ivan Pozdeev Date: Wed, 9 Sep 2026 02:17:04 +0300 Subject: [PATCH 10/16] pwsh: Fix error in shell integration if pyenv is on PATH multiple times Fixes "The term 'pyenv pyenv' is not recognized..." --- libexec/pyenv-init | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From eb36c1b1e8509861ca4689865d65cc2740404525 Mon Sep 17 00:00:00 2001 From: Ayush <63203492+macayu17@users.noreply.github.com> Date: Fri, 11 Sep 2026 17:51:26 +0530 Subject: [PATCH 11/16] CI: publish Ubuntu binary packages (#3539) * CI: Add Ubuntu binary publishing workflow --- .github/workflows/publish_binary.yml | 70 ++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 .github/workflows/publish_binary.yml diff --git a/.github/workflows/publish_binary.yml b/.github/workflows/publish_binary.yml new file mode 100644 index 00000000..30f801ce --- /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.gz" "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 }} From 5d43b9a39df408d51a929c3694fb4fa12aab56a9 Mon Sep 17 00:00:00 2001 From: Mingyang Wu Date: Tue, 15 Sep 2026 07:20:52 +0800 Subject: [PATCH 12/16] python-build: honor explicitly configured OpenSSL on macOS (#3541) * python-build: probe OpenSSL from standard dependency discovery Assisted-by: OpenAI Codex Signed-off-by: Mingyang Wu <129849514+aprylewu@users.noreply.github.com> --- plugins/python-build/bin/python-build | 11 ++ plugins/python-build/test/build.bats | 236 ++++++++++++++++++++++++++ 2 files changed, 247 insertions(+) diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build index ed07ff4c..0a802722 100755 --- a/plugins/python-build/bin/python-build +++ b/plugins/python-build/bin/python-build @@ -873,6 +873,7 @@ build_package_standard_build() { if [ "$package_var_name" = "PYTHON" ]; then if can_use_homebrew; then + configured_with_openssl || use_homebrew_openssl || true use_custom_tcltk || use_homebrew_tcltk || true use_homebrew_readline || true use_homebrew_ncurses || true @@ -885,6 +886,7 @@ build_package_standard_build() { fi fi if can_use_macports; then + configured_with_openssl || use_macports_openssl || true use_custom_tcltk || true use_macports_readline || true use_macports_ncurses || true @@ -1705,8 +1707,17 @@ build_package_mac_readline() { build_package_standard "$@" } +configured_with_openssl() { + local arg + for arg in ${CONFIGURE_OPTS} ${PYTHON_CONFIGURE_OPTS} "${PYTHON_CONFIGURE_OPTS_ARRAY[@]}"; do + [[ "$arg" =~ ^--with-openssl(=|$) ]] && return 0 + done + return 1 +} + has_broken_mac_openssl() { is_mac || return 1 + configured_with_openssl && return 1 local openssl_version="$(/usr/bin/openssl version 2>/dev/null || true)" if [[ $openssl_version = "OpenSSL 0.9.8"?* || $openssl_version = "LibreSSL"* ]]; then if can_use_homebrew; then diff --git a/plugins/python-build/test/build.bats b/plugins/python-build/test/build.bats index fe6e1abb..9003f78f 100644 --- a/plugins/python-build/test/build.bats +++ b/plugins/python-build/test/build.bats @@ -219,8 +219,10 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub brew '--prefix openssl : false' for i in {1..5}; do stub brew false; done stub brew "--prefix : echo '$BREW_PREFIX'" + stub port '-q installed openssl3 : false' '-q installed openssl : false' for i in {1..3}; do stub port false; done stub_make_install @@ -253,6 +255,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub brew '--prefix openssl : false' for i in {1..5}; do stub brew false; done stub brew "--prefix : echo '$BREW_PREFIX'" stub_make_install @@ -282,6 +285,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub port '-q installed openssl3 : false' '-q installed openssl : false' for i in {1..3}; do stub port false; done stub_make_install export PYTHON_BUILD_SKIP_HOMEBREW=1 @@ -315,6 +319,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' stub brew "--prefix libyaml : echo '$brew_libdir'" + stub brew '--prefix openssl : false' for i in {1..6}; do stub brew false; done stub_make_install @@ -341,6 +346,7 @@ OUT mkdir -p "$readline_libdir" stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub brew '--prefix openssl : false' for i in {1..2}; do stub brew false; done stub brew "--prefix readline : echo '$readline_libdir'" for i in {1..3}; do stub brew false; done @@ -371,6 +377,7 @@ OUT mkdir -p "$ncurses_libdir" stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub brew '--prefix openssl : false' for i in {1..3}; do stub brew false; done stub brew "--prefix ncurses : echo '$ncurses_libdir'" for i in {1..2}; do stub brew false; done @@ -400,6 +407,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' stub port "-q installed libyaml : echo ' libyaml @0.2.5_0 (active)'" + stub port '-q installed openssl3 : false' '-q installed openssl : false' for i in {1..3}; do stub port false; done stub_make_install export PYTHON_BUILD_SKIP_HOMEBREW=1 @@ -427,6 +435,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub port '-q installed openssl3 : false' '-q installed openssl : false' stub port "-q installed readline : echo ' readline @8.2.013_0 (active)'" for i in {1..2}; do stub port false; done stub_make_install @@ -457,6 +466,7 @@ OUT stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 1010' + stub port '-q installed openssl3 : false' '-q installed openssl : false' stub port false stub port "-q installed ncurses : echo '$ncurses_libdir'" stub port false @@ -634,6 +644,7 @@ OUT stub uname '-s : echo Linux' stub brew false + stub port '-q installed openssl3 : false' '-q installed openssl : false' for i in {1..3}; do stub port false; done PORT_PREFIX="$(which port)" PORT_PREFIX="${PORT_PREFIX%/bin/port}" @@ -664,6 +675,7 @@ OUT mkdir -p "$BREW_PREFIX" stub uname '-s : echo Linux' + stub brew '--prefix openssl : false' for i in {1..5}; do stub brew false; done stub brew "--prefix : echo '$BREW_PREFIX'" stub_make_install @@ -695,6 +707,7 @@ OUT stub uname '-s : echo Linux' stub brew "--prefix : echo '$BREW_PREFIX'" + stub brew '--prefix openssl : false' for i in {1..5}; do stub brew false; done stub brew "--prefix : echo '$BREW_PREFIX'" stub_make_install @@ -743,6 +756,218 @@ make install OUT } +assert_explicit_openssl() { + local configure_opts="$1" + local definition_opts="$2" + cached_tarball "Python-3.6.2" + + local openssl_libdir="$BATS_TEST_TMPDIR/homebrew-openssl" + mkdir -p "$openssl_libdir" + executable "$BATS_TEST_TMPDIR/bin/brew" <> '$BATS_TEST_TMPDIR/openssl-search' + echo '$openssl_libdir' +else + exit 1 +fi +OUT + executable "$BATS_TEST_TMPDIR/bin/port" <> '$BATS_TEST_TMPDIR/openssl-search' + echo 'openssl3 @3.0.0 (active)' +else + exit 1 +fi +OUT + if [ "$manager" = homebrew ]; then + export PYTHON_BUILD_USE_HOMEBREW=1 + export PYTHON_BUILD_SKIP_MACPORTS=1 + else + export PYTHON_BUILD_SKIP_HOMEBREW=1 + export PYTHON_BUILD_USE_MACPORTS=1 + fi + stub uname '-s : echo Darwin' + stub sw_vers '-productVersion : echo 1010' + stub_make_install + + run_inline_definition < Date: Tue, 15 Sep 2026 04:54:23 +0530 Subject: [PATCH 13/16] pyenv-binary: use xz compression for archives (#3543) --- .github/workflows/publish_binary.yml | 2 +- plugins/pyenv-binary/README.md | 9 ++++++--- .../pyenv-binary/libexec/pyenv-binary-package | 6 +++--- plugins/pyenv-binary/libexec/pyenv-binary-save | 6 +++--- plugins/pyenv-binary/test/package.bats | 10 +++++----- plugins/pyenv-binary/test/save.bats | 16 ++++++++-------- test/Dockerfile | 2 +- 7 files changed, 27 insertions(+), 24 deletions(-) diff --git a/.github/workflows/publish_binary.yml b/.github/workflows/publish_binary.yml index 30f801ce..c3ce5fbb 100644 --- a/.github/workflows/publish_binary.yml +++ b/.github/workflows/publish_binary.yml @@ -52,7 +52,7 @@ jobs: - name: Update downloads run: | mkdir -p site/pythons/binaries - cp "dist/$entry.tar.gz" "dist/$entry.meta" "dist/$entry" \ + cp "dist/$entry.tar.xz" "dist/$entry.meta" "dist/$entry" \ site/pythons/binaries/ cd site/pythons ./update.sh 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/test/Dockerfile b/test/Dockerfile index 58fd3f21..732e6438 100644 --- a/test/Dockerfile +++ b/test/Dockerfile @@ -12,7 +12,7 @@ FROM bash:$BASH apk add sed coreutils findutils \ ;fi # Bats - RUN apk add --update parallel ncurses git binutils \ + RUN apk add --update parallel ncurses git binutils xz \ && mkdir -p ~/.parallel \ && touch ~/.parallel/will-cite COPY --from=bats /root/bats-core /root/bats-core From 8bd6b024447cf3f547b1894f369a83d357fc6aa3 Mon Sep 17 00:00:00 2001 From: native-api Date: Wed, 16 Sep 2026 20:39:57 +0300 Subject: [PATCH 14/16] Backport XCode 27 support to 3.14 (#3545) * Upstream fix (3.14.7): https://github.com/python/cpython/commit/51f6e019416bb45664218dd03ae1a6bc931f2458 * Dependency patch (3.14.6): https://github.com/python/cpython/commit/e29411d405c2dec2cacc36bfbcc3bd7139eaa2f7 * Test on XCode 27 --- .github/workflows/modified_scripts_build.yml | 2 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 101 +++++++++++++++++ ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 101 +++++++++++++++++ ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 101 +++++++++++++++++ ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 101 +++++++++++++++++ ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 101 +++++++++++++++++ ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 101 +++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 101 +++++++++++++++++ 14 files changed, 1339 insertions(+) create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 diff --git a/.github/workflows/modified_scripts_build.yml b/.github/workflows/modified_scripts_build.yml index cae758a8..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 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 + From 6c97017989ad85d12e91e1eb65ee08fcccb3d886 Mon Sep 17 00:00:00 2001 From: native-api Date: Thu, 17 Sep 2026 02:31:45 +0300 Subject: [PATCH 15/16] Backport XCode 27 support to 3.13 (#3546) * Upstream fix (3.13.15): https://github.com/python/cpython/commit/e86913423b4e1aa7b7ff8de3b0df9055d5117159 * Dependency patch (3.13.14): https://github.com/python/cpython/commit/7d265b60133b323232d2811c53f6d10a41a14435 --- .../python-build/share/python-build/3.13.11t | 2 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.0t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.10t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.11t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.12t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.13t | 1 + ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.14t | 1 + .../share/python-build/patches/3.13.1t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.2t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.3t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.4t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.5t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.6t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.7t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.8t | 1 + ...xclude-explicit-dup3-and-pipe2-check.patch | 105 ++++++++++++++++++ ...void-use-of-dup3-and-pipe2-calls-int.patch | 103 +++++++++++++++++ .../share/python-build/patches/3.13.9t | 1 + 45 files changed, 3032 insertions(+) create mode 100644 plugins/python-build/share/python-build/3.13.11t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.0t create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.10t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.11t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.12t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.13t create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.14t create mode 120000 plugins/python-build/share/python-build/patches/3.13.1t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.2t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.3t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.4t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.5t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.6t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.7t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.8t create mode 100644 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 create mode 100644 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 create mode 120000 plugins/python-build/share/python-build/patches/3.13.9t 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.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 From 3d66ee1fdb4629e05739447be48546519efa4372 Mon Sep 17 00:00:00 2001 From: native-api Date: Thu, 17 Sep 2026 02:33:37 +0300 Subject: [PATCH 16/16] Backport XCode 27 support to 3.12 (#3547) * Adapted upstream fix (3.13.15): https://github.com/python/cpython/commit/e86913423b4e1aa7b7ff8de3b0df9055d5117159 and dependency patch (3.13.14): https://github.com/python/cpython/commit/7d265b60133b323232d2811c53f6d10a41a14435 --- ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ ...gh-153711-Avoid-use-of-dup3-and-pipe.patch | 119 ++++++++++++++++++ 15 files changed, 1785 insertions(+) create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 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 +