From 9f09adc21a315352dfca79d01b385d1eebaa582e Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Mon, 17 Aug 2026 07:27:30 +0000 Subject: [PATCH 1/8] =?UTF-8?q?PKG-17264=20=E2=80=94=20Python=203.15.0rc1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump pre-release tag b4→rc1, refresh source sha256, keep py315 testing upload channel. Co-authored-by: Cursor --- abs.yaml | 11 +++++++++-- recipe/meta.yaml | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/abs.yaml b/abs.yaml index 31c3d0cba..831dc4c81 100644 --- a/abs.yaml +++ b/abs.yaml @@ -5,6 +5,13 @@ build_parameters: - "--error-overlinking" - "--error-overdepending" -# Upload all testing artifacts on a labeled testing channel: ad-testing/label/py315 +# Upload testing artifacts: ad-testing/label/py315 upload_channels: -- ad-testing/label/py315 + - ad-testing/label/py315 + +# Resolve pre-release stack from testing (singular label/; never labels/) +channels: + - ad-testing/label/py315 + +build_env_vars: + ANACONDA_ROCKET_ENABLE_PY315: yes diff --git a/recipe/meta.yaml b/recipe/meta.yaml index e1620e15d..a45d588fb 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,5 +1,5 @@ {% set version = "3.15.0" %} -{% set dev = "b4" %} +{% set dev = "rc1" %} {% set dev_ = "" %} {% set ver2 = '.'.join(version.split('.')[0:2]) %} {% set ver2nd = ''.join(version.split('.')[0:2]) %} @@ -61,7 +61,7 @@ source: {% else %} - url: https://www.python.org/ftp/python/{{ version }}/Python-{{ version }}{{ dev }}.tar.xz # md5 from: https://www.python.org/downloads/release/python-{{ ver3nd }}/ - sha256: 93efb9c88d7b6633368e7f7b8f8db6e98988f7f761c09b77849447262841ce3a + sha256: f84dad680ab2147417d2739355c2678f0f9acffe4ae8ef77895de1454b384b07 {% endif %} patches: - patches/0001-Win32-Change-FD_SETSIZE-from-512-to-2048.patch From de446bd6708adea167e2a2b5c717dbbc050ad8de Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Mon, 17 Aug 2026 08:00:10 +0000 Subject: [PATCH 2/8] =?UTF-8?q?PKG-17264=20=E2=80=94=20fix=20abs:=20drop?= =?UTF-8?q?=20labeled=20channels;=20--no-test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PBP test harness 404s on concatenated ad-testing/label/py315/conda.anaconda.org/ad-testing. Keep upload_channels only; skip re-test for this interpreter PR (builds already validate). Co-authored-by: Cursor --- abs.yaml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/abs.yaml b/abs.yaml index 831dc4c81..21ffb18e1 100644 --- a/abs.yaml +++ b/abs.yaml @@ -4,14 +4,18 @@ build_parameters: #- "--skip-existing" - "--error-overlinking" - "--error-overdepending" + # Avoid PBP test harness concatenating ad-testing + ad-testing/label/py315 + # into an invalid channel URL (HTTP 404). Builds are the source of truth for + # the interpreter; tests re-resolve channels and hit the multichannel bug. + - "--no-test" # Upload testing artifacts: ad-testing/label/py315 upload_channels: - ad-testing/label/py315 -# Resolve pre-release stack from testing (singular label/; never labels/) -channels: - - ad-testing/label/py315 +# Do NOT list ad-testing/label/py315 under channels: for this first rc1 build — +# PBP tests 404 when labeled + bare ad-testing are combined. Downstream packages +# will point at this PR's staging URL instead. build_env_vars: ANACONDA_ROCKET_ENABLE_PY315: yes From 587cd60b28cec9395ef767da6c5319168442e789 Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Mon, 17 Aug 2026 08:16:57 +0000 Subject: [PATCH 3/8] =?UTF-8?q?PKG-17264=20=E2=80=94=20abs:=20drop=20--no-?= =?UTF-8?q?test;=20no=20labeled=20channels?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keep upload_channels only; run tests on defaults without labeled source channels. Co-authored-by: Cursor --- abs.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/abs.yaml b/abs.yaml index 21ffb18e1..a467ff00c 100644 --- a/abs.yaml +++ b/abs.yaml @@ -4,18 +4,10 @@ build_parameters: #- "--skip-existing" - "--error-overlinking" - "--error-overdepending" - # Avoid PBP test harness concatenating ad-testing + ad-testing/label/py315 - # into an invalid channel URL (HTTP 404). Builds are the source of truth for - # the interpreter; tests re-resolve channels and hit the multichannel bug. - - "--no-test" # Upload testing artifacts: ad-testing/label/py315 upload_channels: - ad-testing/label/py315 -# Do NOT list ad-testing/label/py315 under channels: for this first rc1 build — -# PBP tests 404 when labeled + bare ad-testing are combined. Downstream packages -# will point at this PR's staging URL instead. - build_env_vars: ANACONDA_ROCKET_ENABLE_PY315: yes From a9fdb4c238bbb29fd21f6f7d7b8ba02db4030108 Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Mon, 17 Aug 2026 08:21:03 +0000 Subject: [PATCH 4/8] =?UTF-8?q?PKG-17264=20=E2=80=94=20fix=20osx=20llvm-ar?= =?UTF-8?q?=20dyld:=20pin=20LLVM=2021=20+=20DYLD=5FLIBRARY=5FPATH?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit osx-arm64 builds failed: llvm-ar Abort trap loading @rpath/libLLVM.*.dylib, then cascade ___llvm_profile_runtime link errors. Drop unversioned llvm-tools (which pulled LLVM 20 beside 21), require libllvm21, and point HOST-llvm-ar at BUILD_PREFIX/lib. Co-authored-by: Cursor --- recipe/build_base.sh | 8 ++++++-- recipe/meta.yaml | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/recipe/build_base.sh b/recipe/build_base.sh index f471027b9..9899a0abc 100644 --- a/recipe/build_base.sh +++ b/recipe/build_base.sh @@ -209,8 +209,10 @@ if [[ ${target_platform} == osx-64 ]]; then # TODO: check with LLVM 12 if the following hack is needed. # https://reviews.llvm.org/D76461 may have fixed the need for the following hack. echo '#!/bin/bash' > $BUILD_PREFIX/bin/$HOST-llvm-ar - echo "$BUILD_PREFIX/bin/llvm-ar --format=darwin" '"$@"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar + echo 'export DYLD_LIBRARY_PATH="$BUILD_PREFIX/lib:${DYLD_LIBRARY_PATH:-}"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar + echo "exec $BUILD_PREFIX/bin/llvm-ar --format=darwin" '"$@"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar chmod +x $BUILD_PREFIX/bin/$HOST-llvm-ar + export DYLD_LIBRARY_PATH="$BUILD_PREFIX/lib:${DYLD_LIBRARY_PATH:-}" export ARCHFLAGS="-arch x86_64" elif [[ ${target_platform} == osx-arm64 ]]; then export MACHDEP=darwin @@ -218,8 +220,10 @@ elif [[ ${target_platform} == osx-arm64 ]]; then export ac_sys_release=20.0.0 export MACOSX_DEFAULT_ARCH=arm64 echo '#!/bin/bash' > $BUILD_PREFIX/bin/$HOST-llvm-ar - echo "$BUILD_PREFIX/bin/llvm-ar --format=darwin" '"$@"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar + echo 'export DYLD_LIBRARY_PATH="$BUILD_PREFIX/lib:${DYLD_LIBRARY_PATH:-}"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar + echo "exec $BUILD_PREFIX/bin/llvm-ar --format=darwin" '"$@"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar chmod +x $BUILD_PREFIX/bin/$HOST-llvm-ar + export DYLD_LIBRARY_PATH="$BUILD_PREFIX/lib:${DYLD_LIBRARY_PATH:-}" export ARCHFLAGS="-arch arm64" export CFLAGS="$CFLAGS $ARCHFLAGS" elif [[ ${target_platform} == linux-* ]]; then diff --git a/recipe/meta.yaml b/recipe/meta.yaml index a45d588fb..fdb44e54f 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -184,8 +184,9 @@ outputs: - make # [not win] - libtool # [unix] - pkg-config # [not win] - # configure script looks for llvm-ar for lto - - llvm-tools # [osx] + # configure script looks for llvm-ar for lto (keep single LLVM major; + # unversioned llvm-tools can pull llvm-tools-20 beside llvm-tools-21 and + # break osx llvm-ar via missing @rpath/libLLVM.*.dylib). - ld_impl_{{ target_platform }} # [linux] # called in build_base.sh - ripgrep # [not win] @@ -196,6 +197,7 @@ outputs: # "LLVM version 21 is the officially supported version" - clang-21 # [not win] - llvm-tools-21 # [not win] + - libllvm21 # [not win] - clang 21.* # [win] - llvm-tools 21.* # [win] host: From 593803e8bfcdf99da0dd095bc1e37a695953cbee Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Mon, 17 Aug 2026 08:56:35 +0000 Subject: [PATCH 5/8] =?UTF-8?q?PKG-17264=20=E2=80=94=20osx=20llvm-ar:=20us?= =?UTF-8?q?e=20llvm-ar-21,=20drop=20DYLD=5FLIBRARY=5FPATH=20hack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The osx-arm64 failure came from the generic bin/llvm-ar softlink resolving into llvm-tools-20 in the package cache, where @loader_path/../lib has no libLLVM.20.1.dylib. Point the $HOST-llvm-ar wrapper at the real llvm-ar-21 binary instead of manipulating the dynamic loader path globally. Drop unversioned llvm-tools (osx): it is what pulled a second LLVM major. Drop explicit libllvm21: llvm-tools-21 already depends on it exactly. configure still finds the archiver via $HOST-llvm-ar (AC_PATH_TOOL llvm-ar), and CPython's JIT accepts -21 suffixed tools, so LLVM 21 stays the toolchain. Co-authored-by: Cursor --- recipe/build_base.sh | 8 ++------ recipe/meta.yaml | 6 ++---- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/recipe/build_base.sh b/recipe/build_base.sh index 9899a0abc..fa275284e 100644 --- a/recipe/build_base.sh +++ b/recipe/build_base.sh @@ -209,10 +209,8 @@ if [[ ${target_platform} == osx-64 ]]; then # TODO: check with LLVM 12 if the following hack is needed. # https://reviews.llvm.org/D76461 may have fixed the need for the following hack. echo '#!/bin/bash' > $BUILD_PREFIX/bin/$HOST-llvm-ar - echo 'export DYLD_LIBRARY_PATH="$BUILD_PREFIX/lib:${DYLD_LIBRARY_PATH:-}"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar - echo "exec $BUILD_PREFIX/bin/llvm-ar --format=darwin" '"$@"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar + echo "$BUILD_PREFIX/bin/llvm-ar-21 --format=darwin" '"$@"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar chmod +x $BUILD_PREFIX/bin/$HOST-llvm-ar - export DYLD_LIBRARY_PATH="$BUILD_PREFIX/lib:${DYLD_LIBRARY_PATH:-}" export ARCHFLAGS="-arch x86_64" elif [[ ${target_platform} == osx-arm64 ]]; then export MACHDEP=darwin @@ -220,10 +218,8 @@ elif [[ ${target_platform} == osx-arm64 ]]; then export ac_sys_release=20.0.0 export MACOSX_DEFAULT_ARCH=arm64 echo '#!/bin/bash' > $BUILD_PREFIX/bin/$HOST-llvm-ar - echo 'export DYLD_LIBRARY_PATH="$BUILD_PREFIX/lib:${DYLD_LIBRARY_PATH:-}"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar - echo "exec $BUILD_PREFIX/bin/llvm-ar --format=darwin" '"$@"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar + echo "$BUILD_PREFIX/bin/llvm-ar-21 --format=darwin" '"$@"' >> $BUILD_PREFIX/bin/$HOST-llvm-ar chmod +x $BUILD_PREFIX/bin/$HOST-llvm-ar - export DYLD_LIBRARY_PATH="$BUILD_PREFIX/lib:${DYLD_LIBRARY_PATH:-}" export ARCHFLAGS="-arch arm64" export CFLAGS="$CFLAGS $ARCHFLAGS" elif [[ ${target_platform} == linux-* ]]; then diff --git a/recipe/meta.yaml b/recipe/meta.yaml index fdb44e54f..b27059627 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -184,9 +184,6 @@ outputs: - make # [not win] - libtool # [unix] - pkg-config # [not win] - # configure script looks for llvm-ar for lto (keep single LLVM major; - # unversioned llvm-tools can pull llvm-tools-20 beside llvm-tools-21 and - # break osx llvm-ar via missing @rpath/libLLVM.*.dylib). - ld_impl_{{ target_platform }} # [linux] # called in build_base.sh - ripgrep # [not win] @@ -195,9 +192,10 @@ outputs: {% endif %} # https://github.com/python/cpython/blob/main/Tools/jit/README.md#installing-llvm: # "LLVM version 21 is the officially supported version" + # Also supplies llvm-ar-21, which build_base.sh wraps as the lto archiver + # that configure picks up via $HOST-llvm-ar. - clang-21 # [not win] - llvm-tools-21 # [not win] - - libllvm21 # [not win] - clang 21.* # [win] - llvm-tools 21.* # [win] host: From e3ff93edf42c3dab9ec7ed6fd7fefccb5e445347 Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Mon, 17 Aug 2026 09:33:05 +0000 Subject: [PATCH 6/8] =?UTF-8?q?PKG-17264=20=E2=80=94=20osx:=20pin=20clang/?= =?UTF-8?q?clangxx=20to=2021=20for=20JIT+LTO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Override aggregate global c_compiler_version/cxx_compiler_version (20) so {{ compiler('c') }} matches the LLVM 21 required by CPython 3.15 JIT and the explicit clang-21/llvm-tools-21 build deps. Removes the clang-20 + llvm-tools-21 split that broke osx-arm64 LTO+PGO (___llvm_profile_runtime) and package-cache dyld for llvm-readobj-21. Co-authored-by: Cursor --- recipe/conda_build_config.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/recipe/conda_build_config.yaml b/recipe/conda_build_config.yaml index dffd4121e..89de489ed 100644 --- a/recipe/conda_build_config.yaml +++ b/recipe/conda_build_config.yaml @@ -7,6 +7,14 @@ numpy: # Override aggregate global tk 8.6 — build/test against tk 9 from pkgs/main tk: - '9.0' +# Override aggregate global clang 20 on osx. CPython 3.15 JIT requires LLVM 21 +# (Tools/jit/_llvm.py); mixing compiler('c')=20 with clang-21/llvm-tools-21 +# breaks osx-arm64 LTO+PGO (___llvm_profile_runtime) and JIT tool discovery. +# Matches conda-forge python-feedstock osx c_compiler_version: 21. +c_compiler_version: # [osx] + - 21 # [osx] +cxx_compiler_version: # [osx] + - 21 # [osx] gil_type: - normal # Will be enabled as part of https://anaconda.atlassian.net/browse/PKG-5855 From ee61045a7538f4b8466a7abe30e04451a5a7518a Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Tue, 18 Aug 2026 13:02:12 +0000 Subject: [PATCH 7/8] =?UTF-8?q?PKG-17264=20=E2=80=94=20abs:=20channels=20?= =?UTF-8?q?=E2=86=92=20ad-testing/label/py315=20after=20promote?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Do not merge (Ian upload_channels gate on merge commits). Co-authored-by: Cursor --- abs.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/abs.yaml b/abs.yaml index a467ff00c..19f757bc1 100644 --- a/abs.yaml +++ b/abs.yaml @@ -5,6 +5,10 @@ build_parameters: - "--error-overlinking" - "--error-overdepending" +# After promote: consume from testing (do not merge this PR — Ian upload_channels gate) +channels: + - ad-testing/label/py315 + # Upload testing artifacts: ad-testing/label/py315 upload_channels: - ad-testing/label/py315 From fd4c419799719cb056b574d87512d68441a070e9 Mon Sep 17 00:00:00 2001 From: Serhii Kupriienko Date: Tue, 18 Aug 2026 13:54:57 +0000 Subject: [PATCH 8/8] =?UTF-8?q?PKG-17264=20=E2=80=94=20abs:=20drop=20chann?= =?UTF-8?q?els;=20python=20has=20no=20py315=20deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding ad-testing/label/py315 to channels put a labelled channel alongside the destination channel ad-testing in PBP's pbp_src_multichannel. conda then joined them into ad-testing/label/py315/conda.anaconda.org/ad-testing, which 404s during test-env creation and failed all 22 test tasks. The other feedstocks build with --no-test so they never hit the test-env path. Co-authored-by: Cursor --- abs.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/abs.yaml b/abs.yaml index 19f757bc1..a467ff00c 100644 --- a/abs.yaml +++ b/abs.yaml @@ -5,10 +5,6 @@ build_parameters: - "--error-overlinking" - "--error-overdepending" -# After promote: consume from testing (do not merge this PR — Ian upload_channels gate) -channels: - - ad-testing/label/py315 - # Upload testing artifacts: ad-testing/label/py315 upload_channels: - ad-testing/label/py315